Node.js - Du Javascript coté serveur

Auteur: Mohamed CHINY Durée necessaire pour le cours de Node.js - Du Javascript coté serveur Niveau recommandé pour le cours de Node.js - Du Javascript coté serveur Supports vidéo disponibles pour ce cours Exercices de renforcement non disponibles pour ce cours Quiz non disponibles pour ce cours

Page 1: Qu'est ce que Node.js?

Toutes les pages
Avant de commencer ce cours, il convient de mentionner qu'il est possible de développer des applications coté serveur nativement en utilisant les modules procurés par défaut par l'environnement d'exécution Node.js. Cependant, procéder de la sorte pourrait être très fastidieux, car il faudrait s'occuper des moindres détails comme l'écoute des requêtes et l'envoi des entêtes. C'est pour cette raison que je vais expliquer rapidement comment monter une application de manière native en Node.js avant de passer à la méthode la plus recommandée pour se faciliter la vie, en l'occurrence, l'utilisation du framework Express.js.

Développement coté serveur (ou Backend)

Créer des applications coté serveur

J'ai déjà traité sur ce site un cours sur le langage PHP (et aussi un autre cours sur la programmation orientée objet en PHP). J'ai souligné que le PHP est un langage de la famille des langages CGI (Common Gateway Interface) et qui permet de créer des sites et applications Web dynamiques. Le plus important encore, c'est que PHP est un langage côté serveur, c'est à dire qu'il s'exécute sur le serveur qui envoie au client le résultat d'exécution qui n'est rien d'autre que le contenu HTML qui sera interprété par le navigateur.

Certes, PHP est le langage CGI le plus implémenté dans les sites et applications Web, notamment via ses frameworks comme Laravel, CodeIgniter, Symfony ou Zend, ou encore via des CMS célèbres comme Wordpress, Drupal, Prestashop... Cependant, il y a d'autres langages qui sont préférés par un grand nombre de développeurs, comme Perl, Ruby ou Python et qui font presque la même chose que PHP.

Ces dernières années, un langage qui était jusque-là considéré comme le leader des langages coté client (frontend), commence à se faire une place parmi les langages dont la vocation est de développement coté serveur, il s'agit du langage Javascript à travers l'environnement d'exécution Node.js.

Qu'est ce que Node.JS et à quoi il sert?

Node.js: un environnement d'exécution pour Javascript

Javascript est réputé pour être le langage de programmation, qui implémente ECMA Script, le plus célèbre pour développer des applications coté client (ou front-end). D'ailleurs, J'ai consacré un cours sur le langage Javascript exécuté coté client sur ce site Web. En effet, un moteur Javascript est incorporé à tous les navigateurs afin qu'ils puissent l'exécuter. D'ailleurs, Javascript est présent sur tous les sites ou applications Web (ou presque), car il permet d'ajouter de l’interactivité aux pages Web.

Javascript peut également échanger les données avec le serveur via l'objet XMLHttpRequest ou l'API Fetch. Cependant, il demeure toujours un langage coté client qui s'exécute sur le navigateur et attend que la réponse lui parvient du serveur afin de la traiter et l'intégrer à la page en question.

En 2009, l'ingénieur logiciel Ryan Lienhart Dahl a eu l'idée brillante d'extraire le moteur d'exécution Javascript V8 (intégré dans le navigateur Chrome) afin de l'exécuter en dehors du navigateur, créant ainsi, un environnement d'exécution Javascript (ou runtime) baptisé Node.js.

Node.js (dont le site officiel est https://nodejs.org/) est un environnement d'exécution Javascript asynchrone non bloquant. Un tel environnement procure au Javascript la possibilité de s'exécuter sur le serveur (comme c'est le cas pour PHP, Python ou Perl...) afin de créer des applications backend ou natives (comme les applications mobiles).

Node.js permet de donner vie à des applications dans des environnements concurrentiels avec une forte montée en charge tout en maintenant de bonnes performances. Ces particularités lui ont permis d'être au cœur de nombreux sites et applications Web comme Netflix, Uber, Paypal ou Linkedin.

Node.js et la gestion de concurrence et de montée en charge

L'une des contraintes les plus importantes vis-à-vis des applications Web est leur capacité à gérer la concurrence. Dans le monde de la programmation informatique, la concurrence consiste au fait qu'il puisse se produire de nombreux appels simultanés au même programme (ou processus informatique). Par nature, les programmes s'exécutent de manière séquentielle et attendent qu'un traitement soit fini pour qu'un autre commence, en l'occurrence la réponse aux requêtes des clients dans une architecture client-serveur. S'il y a de multiples requêtes couteuses en terme de calcul, alors l'application Web montrera une latence importantes vis-à-vis des requêtes entrantes, ce qui pourrait avoir des conséquence néfastes sur ses performances. D'ailleurs, la plupart des applications rencontrent des moments où l'appel des clients augmente fortement (on parle alors de montée en charge). Si cette montée en charge n'était pas gérée, alors l'application pourrait systématiquement céder et ne serait plus en mesure de répondre aux requêtes entrantes.

La programmation concurrentielle est un paradigme qui permet de mieux gérer les interactions avec le mode réel (comme la réponse aux requêtes des clients sur le Web). C'est comme si le programme peut s'exécuter en parallèle plutôt que s'exécuter de manière séquentielle. Cette particularité lui permet de gérer et réponde à plusieurs requêtes à la fois.

Par nature, le langage Javascript est un langage monothread, c'est à dire qu'il exécute toues les fonctions du programme dans un seul fil. Cependant, sa boucle d'événements lui permet de gérer l'exécution des fonctions de manière plus optimisée, de telle sorte à déléguer une tâche à une autre entité en attendant que son traitement soit achevé, tout en manipulant une nouvelle tâche. C'est justement cette particularité qui permet au Javascript de gérer plusieurs requêtes à la fois dans l'environnement Node.js et répartir ainsi le temps de calcul sur plusieurs tâches plutôt que de les traiter une par une.

Avantages et inconvénients de Node.js

On peut résumer les avantages de l'environnement Node.js dans les points suiants:
  • Applications concurrentielles et rapides: Tirant profit de son asynchronicité, les applications faites en Node.js sont plus rapides et gèrent mieux la montée en charge.
  • Adapté aux applications temps réel: Cela rejoint le premier avantage. En effet, Node.js est connu pour son adaptabilité aux applications temps réel qui nécessitent un temps de réaction minimum.
  • Modules facilement accessibles via NPM: Le gestionnaire de paquet npm de Node.js donne la possibilité de télécharger des modules utiles pour l'application en cours de développement.
  • Un seul est unique langage pour le fontend et le backend: Le point que la plupart des développeurs trouvent intéressant c'est le fait qu'on n'a besoin que d'un seul langage qui est Javascript et avec lequel on peut monter une application entière englobant le fontend et le backend (du fullstack).
  • Potabilité et facilité de déployement: Node.js est disponible pour divers systèmes d'exploitation, notamment, Windows, Linux et MacOS, et il est facile et rapide à déployer.
  • Applications en single page: Avec Node.js, il est possible de créer une application qui s'exécute entièrement à travers une seule et unique page à travers des routes (ou endpoints) virtuelles.

Quant-aux inconvénients, je peux en énumérer un seul que la plupart des développeurs trouvent frustrant, il s'agit de:
  • Nécessité de coder tous les aspects d'un serveur manuellement: En effet, en Node.js on est amené à programmer les différents aspects qui concernent un serveur Web, comme le serveur HTTP, le port d'écoute, la gestion des requêtes et des entêtes... Ces choses que l'on trouve généralement déjà disponibles dans des environnement qui exécutent PHP ou Perl par exemple. Cependant, il existe des frameworks, notamment Express.js (que l'on va aussi voir dans ce cours) qui permettent d'abstraire toutes ses opérations rendant encore Node.js plus facile à utiliser.

Note.js en vidéo