Skip to content

VSCode : Profils, Daemons et Gestion de la RAM

🎯 Le Problème

Situation : Tu installes 20 extensions dans VSCode (Python, Rust, Elm, C++, etc.)
Résultat : VSCode bouffe 4 GB de RAM et rame 🐌

Pourquoi ? Les daemons lancés par chaque extension tournent en permanence !


1. C'est Quoi un Daemon ?

Définition Simple

Daemon (ou démon) = Programme qui tourne en arrière-plan en permanence

Caractéristiques :

  • Lance au démarrage
  • Tourne sans interface visible
  • Attend des requêtes
  • Consomme de la RAM même si tu ne l'utilises pas

Analogie

Un daemon, c'est comme un serveur dans un restaurant :

  • Il est toujours là, même s'il n'y a pas de clients
  • Il attend qu'on lui demande quelque chose
  • Il reste debout toute la journée (= consomme de la RAM)

Exemples de Daemons Système

Daemon Rôle
sshd Serveur SSH (connexions distantes)
httpd Serveur web Apache
systemd Gestion des services Linux
Docker daemon Gestion des conteneurs

2. Les Daemons dans VSCode

Pourquoi les Extensions Lancent des Daemons ?

Les extensions de langages ont besoin de :

  1. Analyser ton code en temps réel
  2. Fournir l'autocomplétion
  3. Détecter les erreurs
  4. Formater le code
  5. Naviguer dans les définitions

Pour être réactives, elles lancent un daemon qui :

  • Lit ton code
  • L'analyse en permanence
  • Garde le résultat en mémoire
  • Répond instantanément à tes demandes

Exemples de Daemons d'Extensions

Extension Daemon RAM
Python Pylance Language Server ~200 MB
Rust rust-analyzer ~300 MB
C/C++ clangd ~150 MB
Elm Elm Language Server ~100 MB
Java Eclipse JDT LS ~500 MB
TypeScript tsserver ~250 MB

Total si tout installé : 1.5 GB+ de RAM ! 💥

Visualiser les Daemons

Dans VSCode :

  1. Ouvre la palette : Ctrl+Shift+P
  2. Tape : "Developer: Show Running Extensions"
  3. Regarde la colonne "Activation Time" et "Memory"

En ligne de commande :

# Linux/Mac
ps aux | grep -E "python|rust-analyzer|clangd|elm"

# Windows
tasklist | findstr "python rust clangd"


3. Pourquoi Créer des Profils par Langage

Le Problème Sans Profils

VSCode avec TOUTES les extensions
├── Python extension → lance python daemon (200 MB)
├── Rust extension → lance rust-analyzer (300 MB)
├── Elm extension → lance elm daemon (100 MB)
├── C++ extension → lance clangd (150 MB)
└── ... 15 autres extensions

Total RAM : 2-4 GB

Même si tu codes en Python, les daemons Rust/Elm/C++ tournent quand même !

La Solution : Profils

Un profil = un VSCode avec seulement les extensions nécessaires

Profil Python
├── Python extension → 200 MB
└── Extensions générales (Git, etc.)
Total RAM : 400 MB

Profil Rust
├── Rust extension → 300 MB
└── Extensions générales
Total RAM : 500 MB

Économie : 1.5-3 GB de RAM par profil ! 💰


4. Créer des Profils dans VSCode

Méthode Graphique

Étape 1 : Ouvrir le menu des profils

  1. Clique sur l'icône ⚙️ (engrenage) en bas à gauche
  2. Sélectionne "Profiles"
  3. Clique sur "Create Profile"

Étape 2 : Configurer le profil

Nom : Python Development
Copier depuis : Default Profile (ou None)

Étape 3 : Activer le profil - Le profil s'active automatiquement après création - Tu peux switcher avec : ⚙️ → Profiles → Sélectionne un profil

Étape 4 : Installer uniquement les extensions nécessaires

Pour Python :
✅ Python
✅ Pylance
✅ Python Debugger
✅ Git (général)
✅ GitLens (général)
❌ Rust-analyzer (pas besoin)
❌ Elm (pas besoin)

Méthode Ligne de Commande

# Lancer VSCode avec un profil spécifique
code --profile "Python Development"

# Créer un profil vide
code --profile "Rust Development" --extensions-dir ~/.vscode-rust/extensions

Structure Recommandée

Profils à créer :
├── Default (minimal, sans language servers)
├── Python Development
├── Rust Development
├── Web Development (HTML/CSS/JS)
├── Elm Development
├── C/C++ Development
└── Écriture (Markdown, pas de code)

5. Comment Fonctionnent les Language Servers

Architecture Client-Serveur

VSCode (Client)
    ↓ demande d'autocomplétion
Language Server (Daemon)
    ↓ analyse le code
    ↓ retourne les suggestions
VSCode affiche les suggestions

Le Protocol LSP (Language Server Protocol)

Inventé par Microsoft pour VSCode

Avant LSP :

Chaque éditeur × Chaque langage = N × M implémentations
Vim + Python, Vim + Rust, Emacs + Python, Emacs + Rust...

Avec LSP :

1 Language Server par langage
× 
N éditeurs qui parlent LSP
= N + M implémentations seulement !

Liste de Language Servers : | Langage | Language Server | |---------|-----------------| | Python | Pylance, Pyright | | Rust | rust-analyzer | | C/C++ | clangd, ccls | | JavaScript/TypeScript | tsserver | | Elm | elm-language-server | | Go | gopls | | Java | Eclipse JDT LS |


6. Créer Ton Propre Daemon (Exemple Avancé)

Pourquoi Créer un Daemon ?

Cas d'usage : - Surveiller des fichiers - Compiler automatiquement - Lancer des tests en continu - Analyser le code custom

Exemple Simple en Python

# mon_daemon.py
import time
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MonDaemon(FileSystemEventHandler):
    def on_modified(self, event):
        if event.src_path.endswith('.elm'):
            print(f"Fichier modifié : {event.src_path}")
            os.system(f"elm make {event.src_path}")

if __name__ == "__main__":
    print("🔄 Daemon Elm lancé...")

    observer = Observer()
    observer.schedule(MonDaemon(), path="./src", recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()

Lancer le daemon :

python mon_daemon.py &  # Le & lance en arrière-plan

Intégration dans VSCode

Créer une tâche VSCode (.vscode/tasks.json) :

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Start Elm Daemon",
      "type": "shell",
      "command": "python",
      "args": ["${workspaceFolder}/mon_daemon.py"],
      "isBackground": true,
      "problemMatcher": []
    }
  ]
}

Lancer avec : Ctrl+Shift+P → "Tasks: Run Task" → "Start Elm Daemon"


7. Gérer les Daemons qui Consomment Trop

Diagnostiquer

1. VSCode Task Manager

Ctrl+Shift+P → "Developer: Open Process Explorer"

Désactiver Temporairement des Extensions

Sans changer de profil : 1. Ctrl+Shift+X → Extensions 2. Clique sur l'engrenage de l'extension 3. "Disable (Workspace)" → désactive uniquement pour ce projet


9. Bonnes Pratiques

✅ À Faire

  1. Un profil par langage principal
  2. Python, Elm, Rust, Web, etc.

  3. Profil minimal pour l'écriture

  4. Markdown, notes, docs
  5. Pas de language server = rapide

  6. Désactiver les extensions inutilisées

  7. Pas besoin de Rust si tu codes en Python

  8. Fermer VSCode entre les projets

  9. Libère la RAM des daemons

  10. Surveiller la RAM régulièrement

  11. Process Explorer de VSCode (ui lui même consomme de la RAM, alors ne pas laisser ouvert)

❌ À Éviter

  1. Installer toutes les extensions "au cas où"
  2. Elles tournent même inutilisées

  3. Laisser VSCode ouvert H24

  4. Les daemons accumulent la RAM

  5. Ouvrir plusieurs VSCode avec le même profil

  6. Plusieurs instances du même daemon

  7. Ignorer les warnings de RAM

  8. VSCode te prévient si ça rame

10. Tableau Récapitulatif

Impact sur la RAM

Scénario RAM Utilisée Réactivité
Toutes extensions 3-5 GB Lent 🐌
Profil Python seul 400-600 MB Rapide ⚡
Profil minimal 50-150 MB Très rapide 🚀

Temps de Démarrage

Configuration Démarrage
Sans profils (20 extensions) 10-15s
Avec profil (5 extensions) 2-3s
Profil minimal <1s

🎯 Résumé

Daemon

  • Programme en arrière-plan permanent
  • Consomme de la RAM même inactif
  • Nécessaire pour être réactif

Problème

  • Chaque extension de langage lance un daemon
  • 20 extensions = 2-4 GB de RAM gaspillés

Solution : Profils

  • 1 profil = 1 VSCode avec extensions spécifiques
  • Économie de 1.5-3 GB par profil
  • Démarrage plus rapide

Action

  1. Crée un profil par langage
  2. N'installe que les extensions nécessaires
  3. Change de profil selon ton travail

Tu passes de 4 GB à 500 MB de RAM utilisée ! 💪


📚 Ressources

Documentation VSCode : - Profiles Guide - Extension API

Language Server Protocol : - Specification officielle

Optimisation : - Performance Issues Guide


Pro Tip Final : Active le profil AVANT d'ouvrir un projet. Sinon les daemons se lancent quand même ! 🎯