Comment je ressens ta douleur!
Comme beaucoup, j'ai eu du mal à accéder à l'essence de Node.js car la plupart des gens n'écrivent / ne parlent que de la partie de Node qu'ils trouvent utile - et la partie qu'ils trouvent intéressante est généralement un avantage secondaire de Node plutôt que son principal. objectif. Je dois dire que je pense que c'est fou pour les gens de dire que Node n'est qu'un runtime JavaScript. L'utilisation de JavaScript par Node - et sa sélection du runtime V8 - sont simplement des moyens pour atteindre une fin , les meilleurs outils pour le problème que les développeurs de Node voulaient résoudre.
L'objectif principal de Node était de rendre la gestion des événements utilisateur dans une application Web plus efficace. Donc Node est massivementutilisé sur le back-end d'une application Web. La gestion des événements exige que quelque chose écoute sur la machine serveur ces événements utilisateur. Un serveur http doit donc être configuré pour acheminer chaque événement vers son script de gestionnaire approprié. Node fournit un cadre pour configurer rapidement un serveur pour écouter sur un port dédié les demandes des utilisateurs. Node utilise JavaScript pour la gestion des événements car JavaScript a des fonctions de rappel: cela permet à une tâche d'être suspendue jusqu'à ce que le résultat d'une tâche dépendante soit renvoyé. Peu d'autres langues ont cette fonctionnalité et celles qui en ont peuvent ne pas avoir d'interprète aussi efficace que le moteur d'exécution V8 de Google. La plupart des développeurs Web connaissent JavaScript, il n'y a donc pas d'apprentissage de langue supplémentaire avec Node. De plus, avoir des fonctions de rappel permet de mettre toutes les tâches utilisateur sur un seul threadsans que le blocage explicite ne soit appliqué aux tâches exigeant un accès à la base de données ou au système de fichiers. Et c'est ce qui conduit à l'efficacité d'exécution supérieure de Node sous une utilisation simultanée intensive - l'objectif principal de son développement.
Pour aider les utilisateurs de Node à écrire rapidement du code back-end, les développeurs de Node ont également organisé à la fois une bibliothèque JS intégrée pour les tâches de routine (par exemple, les questions liées aux requêtes HTTP, le (dé) codage de chaînes, les flux, etc.) et le référentiel NPM (Node Package Manager) : il s'agit d'un ensemble de packages de scripts open source gérés par l'utilisateur pour diverses fonctions standard et personnalisées. Tous les projets Node permettent l'importation de packages NPM dans un projet via la commande npm install établie .
Les demandes des utilisateurs traitées via Node seront des éléments nécessaires à l'application Web, comme l'authentification, les requêtes de base de données, la gestion de contenu (Strapi CMS), etc. Tout cela sera envoyé au port Node. (Lorsque l'analyse des données obtenues à partir d'une base de données prend beaucoup de temps CPU, ce type de processus est mieux placé sur un thread séparé afin de ne pas ralentir les requêtes utilisateur plus simples.) Autres types de requêtes utilisateur, par exemple pour charger une autre page Web , téléchargez les fichiers CSS / JS / image, etc., continueront à être envoyés par le navigateur au (x) port (s) par défaut de la machine serveur où le programme du serveur Web (Apache, NGinx, etc.) les gérera.
Ainsi, en pratique , Node est principalement un framework pour la création rapide de serveurs et la gestion des événements, mais qui ne remplace que certaines des fonctions du programme de serveur Web.
D'autres utilisations non-backend de Node exploitent simplement l'une ou l'autre de ses fonctionnalités, par exemple le moteur V8. Par exemple, les outils de construction frontale Grunt et Gulp utilisent Node.js pour traiter un script de construction qui peut être codé pour convertir SASS en CSS, réduire les fichiers CSS / JS, optimiser la taille / le chargement de l'image, etc. Mais ce genre de travail est vraiment juste l'utilisation de sous-produits de Node, et non son utilisation principale qui est de créer des processus backend efficaces pour les applications Web.