On le voit souvent passer dans des CV ou des portfolio "Langages : Javascript, NodeJS,..." et même si la confusion est compréhensible, il est important de comprendre la vraie nature de NodeJS.

Alors je le répête : Non, NodeJS n'est pas un langage de programmation.

NodeJS est un environnement d'exécution pour faire tourner du code Javascript en dehors d'un navigateur. Cet environnement est open-source, cross-platform et majoritairement utilisé pour exécuter des scripts côté serveur.

Sa popularité grandissante, notamment chez les développeurs juniors vient justement du fait que développer des scripts côté serveur ne nécessite plus forcément d'apprendre un nouveau langage, mais de réutiliser un langage déjà connu et utilisé côté front-end.

Son origine

En 1996, l'entreprise Netscape, éditrice du célèbre navigateur web lance "Netscape Livewire", la première tentative de moteur d'exécution Javascript en dehors du navigateur fait son apparition, malheureusement ce dernier ne rencontrera jamais le succès.

Deux ans plus tard, Netscape lancera Rhino, son moteur Javascript entièrement développé en Java qui permet (encore aujourd'hui) de compiler du JS en Bytecode Java et de générer les classes correspondantes.

Mais ce n'est qu'en 2009 que Ryan Dahl écrira la première version de NodeJS dans le but de palier aux contraintes techniques du serveur web Apache, notamment son incapacité de gérer plus de 10 000 connexions simultannées.

Son fonctionnement

NodeJS est écrit en C++, basé sur le moteur d'éxecution V8 (open-source, développé par Google) et implémente une boucle d'évènements ainsi qu'une API d'entrée/sortie bas-niveau.

J'espère qu'il ne vous aura pas échappé qu'un script exécuté par NodeJS n'aura donc pas accès aux APIs d'un navigateur classique (window, localStorage, etc...)

Le fait qu'il soit basé sur une architecture évènementielle et qu'il soit capable de gérer des entrées/sorties de manière asynchrone lui permette de gérer un flux de données très rapide et d'être optimisé pour des systèmes temps-réels.

La gestion de requêtes concurrentes est de ce fait bien meilleure que celle d'Apache, en voici la preuve, néanmoins le fait qu'il soit limité à tourner sur un seul thread (un sous-coeur virtuel du processeur) ne lui permet pas d'être très performant sur de gros calculs (pas de parallélisation).

A noter que NodeJS est UNIQUEMENT capable de faire tourner du code Javascript, si l'on veut l'utiliser en TypeScript par exemple, il faudra passer par le compilateur TS en amont.

Une alternative ?

En 2018, le créateur de NodeJS Ryan Dahl a annoncé qu'il travaillait sur un nouvel environnement d'exécution Javascript appelé "Deno", censé résoudre les erreurs qu'il regrette avoir commises en créant NodeJS.

Sa version 1.0 a été publiée le 13 Mai 2020 et est disponible ici : https://deno.land/

Quelques différences :

  • Deno est écrit en Rust
  • La gestion des dépendances est intégrée et non reléguée à une tierce-partie comme avec npm
  • Le Typescript est nativement géré par Deno
  • Une librairie standard est présente pour offrir un développement basé sur du code officiel, testé et révisé.
  • ...

Pour l'instant nous sommes encore loin de voir passer des applications tournant sur l'environnement Deno mais le projet mérite qu'on porte un intérêt pour sa future évolution !

J'espère que cet article vous aura plus, à bientôt sur le blog !

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage de d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par NeONBRAND sur Unsplash