Pourquoi pnpm installe plus rapidement que npm : le stockage, les liens et node_modules strict
PNPM surpasse npm en termes de vitesse d’installation grâce à l’utilisation d’un stockage adressable par contenu, de liens directs plutôt que de copies, ainsi qu’à un node_modules strictement basé sur des symlinks qui évite le coûteux processus de hoisting.
Lorsqu’on déplace un répertoire de npm vers pnpm, la durée d’installation diminue souvent fortement. Ce phénomène n’est pas imaginaire. pnpm a été conçu pour résoudre les problèmes de performance et d’espace de stockage liés aux installations classiques avec npm, et les deux outils stockent les paquets de manière si différente que cette différence de vitesse relève d’un changement architectural, et non d’une simple modification mineure.
Les sections suivantes expliquent pourquoi pnpm a tendance à avoir l’avantage, surtout lorsque les applications et les monorepos deviennent plus volumineux.
1. Un stockage adressable par contenu plutôt que des fichiers dupliqués
L’avantage majeur provient de la manière dont les paquets sont stockés sur le disque. Avec npm, chaque projet dispose de son propre arbre physique contenant toutes ses dépendances sous node_modules. Ainsi, dix applications ayant toutes besoin de lodash conservent dix copies distinctes de cette version sur le disque.
pnpm gère un magasin global adressable par contenu pour la machine. Chaque version occupe une seule case dans ce magasin ; un projet qui en a besoin reçoit des liens directs (ou des références de type copie sur écriture) depuis ce magasin vers son node_modules local. Les conséquences sont les suivantes :
- Évitement des téléchargements répétés lorsque le magasin contient déjà la version
- Évitement de l’écriture redondante des octets déjà présents sur le disque
- Consommation bien moindre d’espace lorsque de nombreux projets partagent des bibliothèques
Puisque les opérations d’installation sont principalement basées sur des entrées/sorties disque, l’élimination des écritures répétées est ce qui diminue le plus la latence.
2. Liens directs et liens symboliques au lieu de copie
Le mécanisme d’installation de npm copie les fichiers des paquets dans node_modules. Copier des milliers de fichiers au sein d’une structure profonde est coûteux.
pnpm préfère les liens forts depuis le stock global vers le projet, ainsi que des liens symboliques qui organisent la structure imbriquée pour qu’elle corresponde au graphe des dépendances. Un lien est en fait gratuit par rapport à une copie : le système d’exploitation enregistre simplement un autre pointeur vers les mêmes blocs au lieu de les dupliquer.
3. Mémorisation efficace entre projets
npm mémorise également les téléchargements, mais il procède néanmoins à leur expansion et à leur copie dans chaque projet à partir de cette mémoire. Selon le modèle de stockage de pnpm, une fois qu’une version existe quelque part sur la machine, l’intégrer dans un projet entièrement nouveau est presque instantané — pas de deuxième téléchargement et peu de traitement supplémentaire.
Ce comportement se distingue notamment dans les cas suivants :
- Le passage entre des branches qui utilisent des ensembles de dépendances différents
- La gestion de plusieurs répertoires partageant des bibliothèques communes
- L’exécution de tâches CI qui restaurent un stockage partagé entre les builds
4. Une structure node_modules non plate qui évite des tâches de résolution supplémentaires
Au passé, npm a aplati les dossiers node_modules afin de réduire les doublons, mais cette stratégie entraîne ses propres coûts : une résolution complexe pour déterminer où placer chaque package sans conflits.
pnpm maintient un layout strict de node_modules basé sur des liens symboliques, de sorte qu’un package ne voit que les dépendances qu’il a lui-même déclarées (pas d’importations accidentelles). Une résolution plus sûre n’est pas le seul avantage : cela permet également d’éviter la planification coûteuse de npm, réduisant ainsi la consommation de CPU lors des installations.
5. Opérations parallélisées
pnpm planifie les étapes de résolution, de récupération et de création de liens en parallèle chaque fois que c’est possible, de manière plus agressive que la méthode habituelle de npm. En combinant cette parallélisation avec des opérations I/O basées sur la création de liens plutôt que sur la copie, le temps total d’exécution diminue encore davantage, surtout pour des arbres à graphes de dépendances très complexes.
6. L’impact dans le monde réel augmente avec la taille du projet
Dans une application de jeu disposant de quelques paquets seulement, la différence peut sembler modeste. L’avantage augmente avec :
- Les monorepos dont les nombreux paquets réutilisent les mêmes bibliothèques
- Les équipes qui gèrent plusieurs produits en partageant des dépendances
- Les pipelines CI/CD qui s’installent à plusieurs reprises lors de chaque compilation
- De grands arbres de dépendances typiques des stacks frontend modernes
Dans de telles situations, les installations par stockage et lien, qui prenaient autrefois des minutes avec npm, peuvent être réduites à quelques secondes.
7. Les économies d’espace disque sont un effet secondaire, pas seulement un avantage
La vitesse est le point clé, mais le même design permet également de gérer l’espace de stockage. Comme les paquets ne sont pas clonés pour chaque projet, les groupes peuvent souvent récupérer des gigaoctets. Sur des disques plus lents, moins de données à traiter a également pour effet secondaire d’améliorer le débit.
Une analogie rapide
Pensez à npm comme une bibliothèque qui photocopie le même ouvrage pour chaque utilisateur. pnpm, quant à lui, est une bibliothèque où tout le monde partage une même étagère et chaque lecteur reçoit un marque-page vers la copie commune. La photocopie coûte du temps et du papier ; pointer vers un volume existant est presque gratuit.
Conclusion
L’avantage de pnpm par rapport à npm n’est pas une simple fonctionnalité esthétique. Il repense le stockage et les liens : il évite les téléchargements redondants, privilégie les liens aux copies et élimine les tâches inutiles. Les installations — souvent l’étape la plus lente dans les workflows frontend — deviennent ainsi une opération plus rapide et plus efficace.
Pour les équipes disposant de plusieurs projets ou d’un monorepo, l’adoption de pnpm compte parmi les améliorations les plus simples possibles en termes de latence d’installation et d’utilisation du disque.