Node.js
En 2009, Ryan Dahl présente Node.js lors d'une conférence européenne sur le JavaScript. Cette technologie allait changer la donne en permettant d'utiliser JavaScript en dehors des navigateurs web. Jusqu'alors, ce langage restait cantonné au front-end, depuis sa création par Brendan Eich en 1995 pour Netscape. À l'origine, JavaScript servait surtout à animer les pages web et manipuler le DOM. Netscape avait bien tenté une version serveur avec Netscape Enterprise Server, mais l'essai s'était soldé par un échec.
Le nom de JavaScript témoigne d'une stratégie marketing : surfer sur la vague de popularité de Java. Pourtant, les deux langages n'ont rien à voir. JavaScript doit bien plus à Scheme et Self qu'à Java, dont il reprend juste quelques éléments de syntaxe. Pendant des années, les programmeurs sérieux regardaient JavaScript de haut, le jugeant trop lent et inadapté aux vraies applications. Cette réputation a volé en éclats avec l'arrivée de moteurs plus puissants, notamment le V8 de Google Chrome. Grâce à la compilation à la volée, l'insertion de code et l'optimisation dynamique, JavaScript a pu rivaliser avec C++ sur certains benchmarks et dépasser Python dans la plupart des cas.
Node.js s'appuie sur le moteur V8 pour bâtir une plateforme serveur robuste. L'architecture tranche avec les approches traditionnelles. Là où Apache crée un nouveau thread ou processus à chaque connexion, Node.js mise sur une boucle événementielle mono-thread. Cette stratégie évite les coûts de création et gestion des threads, qui pèsent lourd quand le serveur croule sous les requêtes.
La gestion des entrées-sorties fait la différence. Au lieu de bloquer l'exécution en attendant qu'une opération se termine, Node.js utilise des callbacks qui traitent les résultats de façon asynchrone. Le serveur peut ainsi jongler avec plusieurs requêtes pendant qu'une opération tourne en arrière-plan. Les ressources sont mieux exploitées, les temps morts disparaissent.
La communauté s'est vite emparée du projet. Dès 2010, Isaac Schlueter lance NPM (Node Package Manager), véritable pierre angulaire de l'écosystème. Les développeurs peuvent partager et réutiliser du code sans friction, ce qui accélère l'adoption. L'année suivante, une version Windows native voit le jour et élargit considérablement l'audience.
Joyent, société de logiciels et de services basée à San Francisco, pilote le développement pendant quelques années avant que le projet ne rejoigne la Fondation Node.js en 2015. Pendant cette transition vers une gouvernance plus ouverte, sous l'égide d'un comité technique de pilotage, Node.js devient un projet collaboratif de la Linux Foundation. En 2019, la fusion avec la Fondation JS donne naissance à la Fondation OpenJS, qui coordonne mieux l'écosystème JavaScript.
Le registre NPM héberge aujourd'hui plus de deux millions de paquets, ce qui en fait le plus gros référentiel logiciel au monde. On y trouve des frameworks comme Express, des outils de développement comme browserify et gulp, et plus de 8 000 clients de bases de données, de redis à mongoose.
La boucle événementielle mono-thread pourrait sembler un frein sur les processeurs multicœurs modernes. Node.js contourne l'obstacle avec le module cluster, qui crée des processus workers partageant les ports du serveur parent. Un algorithme round-robin sensible à la charge distribue les requêtes entre les cœurs disponibles.
Le succès de Node.js a popularisé la programmation asynchrone basée sur les événements. Cette approche convient bien aux applications gourmandes en concurrence, comme la messagerie instantanée ou les services temps réel. La plateforme a aussi favorisé le JavaScript isomorphe, où le même code tourne côté client et serveur.
Node.js continue d'évoluer. Le support des modules ECMAScript, l'amélioration des performances et le renforcement de la sécurité figurent parmi les priorités actuelles. La plateforme reste pertinente pour les microservices, les applications serverless, les outils de développement et les applications de bureau via Electron. En proposant une autre façon de faire du serveur, Ryan Dahl a redéfini la construction d'applications web performantes et scalables.