Node.js: Aperçu, fonctionnement, aspects et installation

Node.js: Aperçu, fonctionnement, aspects et installation

Une grande partie du buzz autour de Node.js se concentre sur le web. En vérité, Node.js sert un but plus grand que les gens manquent souvent. Utilisons une carte pour voir où se situe Node.js dans le cadre plus large des choses.

Imaginez l’ensemble des programmes possibles comme les habitants d’une vaste mer. Les programmes qui ont des objectifs similaires sont proches les uns des autres, et les programmes qui diffèrent sont plus éloignés les uns des autres.

En gardant cette photo à l’esprit, jetez un coup d’œil à cette carte. Il montre un gros plan d’un affleurement particulier dans cette mer, l’île des programmes E/S liés.

Coté serveur et coté client NodeJS
Coté serveur et coté client NodeJS

Les programmes d’E/S sont freinés par l’accès aux données. Il s’agit de programmes où l’ajout d’une puissance de traitement ou d’une mémoire vive supplémentaire ne fait souvent que peu de différence.

A l’est de la chaîne de la barre verticale, on trouve les programmes côté client. Il s’agit notamment d’outils d’interface graphique de toutes sortes d’applications grand public, d’applications mobiles et d’applications Web.

Les programmes destinés aux clients interagissent directement avec les êtres humains, souvent en attendant patiemment leurs saisies.

A l’ouest de la barre verticale se trouvent les programmes côté serveur. Cette vaste zone est le territoire de Node.js.

Au plus profond de la région côté serveur se trouve la vieille garde de HTTP, Ajax, et REST, qui communiquent avec JSON. Les sites Web, les applications et les API qui consomment tant de notre énergie mentale collective vivent ici.

Parce que nous passons tellement de temps à penser au web, nous accordons souvent trop d’importance à l’utilisation de Node.js dans le développement d’applications web. Les gens demandent, “Comment Node.js est-il meilleur pour faire des applications web” ou “Comment puis-je faire un service REST avec Node.js ?”

Ce sont de bonnes questions, mais elles ne sont pas pertinentes. Node.js est idéal pour un plus large éventail de choses, et ce site web explore cette plus grande région.

Niche de Node.js

Depuis l’apparition de JavaScript en 1995, il a résolu des problèmes tout au long du spectre front-end/back-end. La figure suivante montre ce spectre et la place de Node.js à l’intérieur de celui-ci.

Niche.js
Niche de Node.js

Dans le navigateur Web de droite, une grande partie des scripts consiste à attendre l’interaction de l’utilisateur : cliquez ici, faites-le glisser, choisissez un fichier, etc. JavaScript a connu un succès extraordinaire dans ce domaine.

A gauche, les bases de données back-end investissent massivement dans JavaScript. Les bases de données documentaires telles que MongoDB et CouchDB utilisent JavaScript de manière extensive – de la modification d’enregistrements aux requêtes ad hoc et à la réduction des tâches (MapReduce).

D’autres banques de données NoSQL, comme Elasticsearch et Neo4j, présentent des données en JavaScript Object Notation (JSON). De nos jours, vous pouvez même écrire des fonctions SQL pour Postgres en JavaScript avec le bon plugin.

De nombreuses tâches Middleware sont liées aux E/S, tout comme les scripts et les bases de données côté client.

Ces programmes côté serveur doivent souvent attendre des choses telles qu’un résultat de base de données, un feedback d’un service web tiers, ou des demandes de connexion entrantes. Node.js est conçu exactement pour ce genre d’applications.

Node.js a également fait des progrès dans le domaine des systèmes autonomes. Les plates-formes de prototypage de l’Internet des objets, comme Raspberry Pi OS Raspbian, viennent avec Node.js, et Tessel est construit sur Node.js à partir de zéro.

Johnny-Five et CylonJS sont deux plateformes de développement robotique qui vous aident à développer des applications Node.js pour une variété de composants matériels.

Puisque la robotique et les applications Internet des objets ont tendance à être très spécifiques au matériel, leur développement n’est pas couvert dans cette section d’articles sur Node.js.

Cependant, la compétence du développement de Node.js serait transférée si vous décidez d’aller dans cette direction à l’avenir.

Comment fonctionnent les applications Node.js

Node.js associe JavaScript à une boucle d’événements pour distribuer rapidement les opérations lorsque des événements se produisent.

De nombreux environnements JavaScript utilisent une boucle d’événements, mais il s’agit d’une fonctionnalité essentielle de Node.js.

La philosophie de Node.js est de vous donner un accès de bas niveau à la boucle des événements et aux ressources système. Ou, comme l’a dit Felix Geisendörfer, membre du comité de base, dans Node.js “tout fonctionne en parallèle, sauf votre code”.

Si cela vous semble un peu arriéré, ne vous inquiétez pas. La figure suivante montre le fonctionnement de la boucle d’événements.

Comment fonctionnent les applications Node.js
Comment fonctionnent les applications Node.js

Tant qu’il reste quelque chose à faire, la boucle d’événement de Node.js continuera à tourner. Chaque fois qu’un événement se produit, Node.js lance tous les appels de fonction (gestionnaires d’événements) qui sont à l’écoute de cet événement.

En tant que développeur de Node.js, votre travail consiste à créer les appels de fonctions qui sont exécutées en réponse à des événements. N’importe quel nombre de callbacks peut répondre à n’importe quel événement, mais une seule fonction peut être exécutée à tout moment.

Tout le reste que votre programme peut faire – comme attendre les données d’un fichier ou une demande HTTP entrante – est géré par Node.js, en parallèle, dans les coulisses.

Votre code d’application ne sera jamais exécuté en même temps que n’importe autre chose. Il aura toujours toute l’attention du moteur JavaScript de Node.js pendant son exécution.

Mono-thread et parallélisme élevé

D’autres systèmes essaient d’obtenir du parallélisme en exécutant beaucoup de code en même temps, généralement en générant de nombreux threads. Mais pas Node.js.

En ce qui concerne votre code JavaScript, Node.js est un environnement à thread unique. Tout au plus, une seule ligne de votre code sera exécutée à un moment donné.

Node.js s’en sort en effectuant la plupart des tâches d’E/S en utilisant des techniques non bloquantes. Plutôt que d’attendre la fin d’une opération ligne par ligne, vous créez une fonction de rappel (callback function) qui sera appelée lorsque l’opération réussit ou échoue.

Votre code devrait faire ce qu’il doit faire, puis remettre rapidement le contrôle à la boucle d’événement pour que Node.js puisse travailler sur autre chose. Nous développerons des exemples pratiques de cela tout dans de prochains articles.

S’il vous semble étrange que Node.js réalise le parallélisme en n’exécutant qu’un seul morceau de code à la fois, c’est parce que c’est le cas.

Prenons le concept de variable. En algèbre, il est courant de voir des équations comme 7x + 3 = 24. Ici, x s’appelle une variable ; elle a exactement une valeur, et votre travail est de résoudre l’équation pour savoir quelle est cette valeur.

Puis, lorsque vous commencez à apprendre à programmer, vous rencontrez rapidement des énoncés comme x = x + 7. Maintenant x s’appelle toujours une variable, mais elle peut avoir n’importe quelle valeur que vous lui attribuez. Il peut même avoir des valeurs différentes à des moments différents !

Du point de vue de l’algèbre, c’est un retour en arrière. L’équation x = x + 7 n’a aucun sens. La notion de variable dans la programmation n’est pas seulement un peu différente de celle de l’algèbre – c’est 100 pour cent en arrière.

Mais une fois que vous comprenez le concept d’assignation, la variable de programmation prend tout son sens.

Il en est de même avec la boucle d’événement mono-thread de Node.js. D’un point de vue multithread, exécuter un seul morceau de code à la fois semble idiot. Mais une fois que vous comprenez la programmation pilotée par événements – avec des API non bloquantes – cela devient clair.

La programmation est pleine de choses bizarres comme celles-ci, et Node.js ne fait pas exception. Au début, vous rencontrerez fréquemment du code qui semble devoir fonctionner dans un sens, mais il fait en fait quelque chose de tout à fait différent.

C’est pas grave ! Avec ce site web, vous apprendrez Node.js en créant des programmes compacts qui interagissent de manière utile. Au fur et à mesure que nous rencontrerons d’autres aspects un peu bizarres de Node.js, nous nous plongerons et les explorerons.

Aspects du développement de Node.js

Node.js est un sujet étonnamment vaste, alors décomposons-le en différents aspects. Nous pourrions parler de plusieurs aspects du développement de Node.js, allant de la syntaxe JavaScript de base au contrôle de révisions. Cette catégorie d’articles sur Node.js se concentre sur cinq d’entre elles en particulier :

  • La programmation pratique
  • Le noyau Node.js
  • Patterns
  • JavaScriptisms
  • Code de soutien

Examinons brièvement chacun d’entre eux.

Programmation pratique

La programmation pratique consiste à produire du vrai code qui fait quelque chose d’utile. L’interaction avec un système de fichiers, l’établissement de connexions socket et le service d’applications web sont autant d’exemples de programmation pratique.

Chaque article restant de cette catégorie se concentre sur un domaine pratique particulier. Grâce à des exemples de code spécifiques à chaque domaine, vous apprendrez l’architecture de Node.js, les modèles, les JavaScriptisms, et le code de support.

Le noyau de Node.js

Comprendre les modules de base et le comportement de Node.js vous aidera à exploiter ses fonctionnalités tout en évitant les erreurs de manipulation. Par exemple, Node.js utilise une boucle d’événements écrite en C pour planifier le travail.

Mais il exécute du code d’application dans un environnement JavaScript. La façon dont l’information est transférée entre ces couches est le genre de détails architecturaux percutants que vous allez apprendre.

Les Patterns

Comme n’importe quel base de code (codebase en anglais) réussi avec un écosystème sain, Node.js a un certain nombre de patterns qui se répètent.

Certains de ces modèles sont intégrés dans le noyau tandis que d’autres apparaissent principalement dans des bibliothèques tierces.

Les exemples incluent l’utilisation des appels de fonction, les techniques de traitement des erreurs et les classes comme EventEmitter et Stream, qui sont largement utilisées pour la répartition des événements.

Au fur et à mesure que nous progressons dans les différents domaines de programmation pratique, nous rencontrerons naturellement ces modèles et d’autres encore. Lorsque nous le ferons, vous découvrirez pourquoi ils sont utiles et comment les utiliser efficacement.

Les Javascriptisms

JavaScript est le langage des programmes Node.js, vous en verrez donc beaucoup. Les exemples de code dans ce site utilisent les dernières fonctionnalités JavaScript disponibles que Node.js supporte.

Certaines de ces fonctionnalités peuvent ne pas vous être familières, même si vous avez déjà développé JavaScript.

Les JavaScriptisms modernes discutés dans ce site web incluent des choses comme les fonctions flèche, les paramètres d’étalement et l’affectation de déstructuration.

Code de soutien

Le code de support couvre beaucoup de choses, allant des tests unitaires aux scripts de déploiement. Nous utiliserons du code de support tout au long de cette catégorie d’articles pour rendre nos programmes plus robustes, plus évolutifs et plus faciles à gérer.

Avec ces cinq aspects, vous serez en mesure de développer des applications qui tirent le meilleur parti de la plate-forme tout en utilisant le style idiomatique Node.js.

Les exemples d’applications que vous développerez dans ce site web sont fonctionnels et petits, et visent à démontrer clairement ces concepts. Mais pour les utiliser, vous devez d’abord installer Node.js.

Installation de Node.js

Pour installer Node.js, vous avez plusieurs choix en fonction de votre système d’exploitation et de votre confort à compiler Node.js à partir du code source.

Cet article et les prochains articles suppose que vous utilisez la dernière version stable de Node.js 8. Si vous installez une version différente – par exemple, en compilant à partir du code source le plus récent – les exemples de code contenus dans ce site web peuvent ne pas fonctionner.

Depuis la ligne de commande, vous pouvez exécuter la commande node –version pour voir quelle version vous avez installée si vous n’êtes pas sûr :

node $ --version

v8.0.0

L’un des moyens les plus simples d’obtenir Node.js est de télécharger un installateur depuis nodejs.org.

Une autre option populaire (celle que j’utilise personnellement) est Node.js Version Manager (nvm). Si vous utilisez un OS de type Unix (comme Mac OS X ou Linux), vous pouvez installer nvm comme ça :

$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh

Installez ensuite une version spécifique :

nvm install v8.0.0.0

Si vous avez des problèmes, vous pouvez obtenir de l’aide sur les listes de diffusion Node.js et le canal IRC, tous deux liés à partir de la page de la communauté Node.js.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here