JavaScript est l’un des langages de programmation les plus populaires au monde. Aujourd’hui, il propulse des millions de sites web et il a attiré des masses de développeurs et de concepteurs pour créer des fonctionnalités pour le web. Si vous êtes novice en programmation, JavaScript est facilement l’un des meilleurs langages de programmation à maîtriser.

Au cours de ses 20 premières années, JavaScript a été utilisé principalement pour les scripts côté client. Étant donné que JavaScript ne pouvait être utilisé qu’à l’intérieur de la balise <script>, les développeurs devaient travailler dans plusieurs langages et frameworks entre les composants frontend et backend. Plus tard est apparu Node.js, qui est un environnement d’exécution comprenant tout ce qui est nécessaire pour exécuter un programme écrit en JavaScript.

Node.js est un environnement d’exécution single-thread, open-source et multi-plateforme permettant de créer des applications rapides et évolutives côté serveur et en réseau. Il fonctionne avec le moteur d’exécution JavaScript V8 et utilise une architecture d’E / S non bloquante et pilotée par les événements, ce qui le rend efficace et adapté aux applications en temps réel.

En quoi Node.js est-il écrit ?

Node.js est écrit en C, C++ et JavaScript.

Wikipédia définit Node.js comme « une compilation packagée du moteur JavaScript V8 de Google, de la couche d’abstraction de la plateforme libuv et d’une bibliothèque centrale, qui est elle-même principalement écrite en JavaScript ».

Le runtime utilise Chrome V8 en interne, qui est le moteur d’exécution JavaScript, et il est également écrit en C++. Cela ajoute des cas d’utilisation supplémentaires au répertoire de Node.js, comme l’accès aux fonctionnalités internes du système (comme la mise en réseau).

Architecture de Node.js et comment elle fonctionne

Node.js utilise l’architecture « Single Threaded Event Loop » pour gérer plusieurs clients en même temps. Pour comprendre en quoi cela est différent des autres runtimes, nous devons comprendre comment les clients concurrents multi-threads sont gérés dans des langages comme Java.

Dans un modèle requête-réponse multi-thread, plusieurs clients envoient une requête, et le serveur traite chacune d’entre elles avant de renvoyer la réponse. Cependant, plusieurs threads sont utilisés pour traiter les appels simultanés. Ces threads sont définis dans un pool de threads, et chaque fois qu’une requête arrive, un thread individuel est affecté à son traitement.

Comment node.js traite les requêtes entrantes en utilisant la boucle d'événement
Comment node.js traite les requêtes entrantes en utilisant la boucle d’événement

Node.js fonctionne différemment. Jetons un coup d’œil à chaque étape qu’il traverse :

  1. js maintient un pool limité de threads pour servir les requêtes.
  2. Chaque fois qu’une requête arrive, Node.js la place dans une file d’attente.
  3. Maintenant, la « boucle d’événement » single-thread – le composant central – entre en jeu. Cette boucle d’événement attend les requêtes indéfiniment.
  4. Lorsqu’une requête arrive, la boucle la récupère dans la file d’attente et vérifie si elle nécessite une opération d’entrée / sortie (E / S) bloquante. Si ce n’est pas le cas, elle traite la requête et envoie une réponse.
  5. Si la requête doit effectuer une opération de blocage, la boucle d’événements attribue un thread du pool de threads internes pour traiter la requête. Le nombre de threads internes disponibles est limité. Ce groupe de threads auxiliaires est appelé le groupe de worker.
  6. La boucle d’événements suit les requêtes bloquantes et les place dans la file d’attente une fois que la tâche bloquante est traitée. C’est ainsi qu’elle conserve sa nature non bloquante.

Puisque Node.js utilise moins de threads, il utilise moins de ressources et de mémoire, ce qui permet une exécution plus rapide des tâches. Ainsi, pour nos besoins, cette architecture single-thread est équivalente à une architecture multi-threads. Lorsque l’on doit traiter des tâches à forte intensité de données, l’utilisation de langages multi-threads comme Java est beaucoup plus logique. Mais pour les applications en temps réel, Node.js est le choix évident.

Caractéristiques de Node.js

Node.js a connu une croissance rapide au cours des dernières années. Cela est dû à la vaste liste de fonctionnalités qu’il offre :

  1. Facile – Easy-Node.js est assez facile à prendre en main. C’est un choix incontournable pour les débutants en développement web. Grâce à de nombreux tutoriels et à une vaste communauté, il est très facile de se lancer.
  2. Évolutif – Il offre une grande évolutivité aux applications. Node.js, étant single-thread, est capable de gérer un grand nombre de connexions simultanées avec un débit élevé.
  3. Vitesse – L’exécution non bloquante des threads rend Node.js encore plus rapide et plus efficace.
  4. Paquets – Un vaste ensemble de paquets Node.js open source est disponible et peut simplifier votre travail. Aujourd’hui, il y a plus d’un million de paquets dans l’écosystème NPM.
  5. Backend solide – Node.js est écrit en C et C++, ce qui le rend rapide et ajoute des fonctionnalités comme le support réseau.
  6. Multi-plateforme – La prise en charge multi-plateforme vous permet de créer des sites web SaaS, des applications de bureau et même des applications mobiles, le tout en utilisant Node.js.
  7. Maintenable – Node.js est un choix facile pour les développeurs, car le frontend et le backend peuvent être gérés avec JavaScript comme un seul langage.

Taille du marché

Les sites web ont connu une croissance immense au cours des deux dernières décennies, et comme prévu, Node.js connaît également une croissance rapide. Le runtime populaire a déjà franchi le seuil de 1 milliard de téléchargements en 2018, et selon W3Techs, Node.js est utilisé par 1,2 % de tous les sites web du monde entier. Cela représente plus de 20 millions de sites au total sur Internet.

Il n’est pas surprenant qu’il s’agisse d’un choix populaire auprès de millions d’entreprises, également. Voici quelques-unes des plus populaires qui utilisent Node.js aujourd’hui :

  • Twitter
  • Spotify
  • eBay
  • Reddit
  • LinkedIn
  • Godaddy

Applications de Node.js

Applications de Node.js
Applications de Node.js

Node.js est utilisé pour une grande variété d’applications. Explorons quelques cas d’utilisation populaires où Node.js est un bon choix :

  1. Conversations en temps réel – En raison de sa nature asynchrone à un seul thread, Node.js est bien adapté au traitement des communications en temps réel. Il peut facilement évoluer et est souvent utilisé pour créer des chatbots. Node.js facilite également la mise en place de fonctionnalités de chat supplémentaires, comme le chat multi-personnes et les notifications push.
  2. Internet des objets – Les applications de l’Internet des objets (IoT) comprennent généralement plusieurs capteurs, car elles envoient fréquemment de petits morceaux de données qui peuvent s’empiler en un grand nombre de requêtes. Node.js est un bon choix car il est capable de gérer rapidement ces requêtes concurrentes.
  3. Streaming de données – Des sociétés comme Netflix utilisent Node.js à des fins de streaming. Cela est principalement dû au fait que Node.js est léger et rapide, et qu’il fournit une API de streaming native. Ces flux permettent aux utilisateurs d’acheminer les requêtes les unes vers les autres, ce qui a pour effet de diffuser les données directement vers leur destination finale.
  4. Applications complexes à page unique (Single Page Application ou SPA) – Dans les SPA, l’ensemble de l’application est chargé dans une seule page. Cela signifie généralement qu’il y a quelques requêtes faites en arrière-plan pour des composants spécifiques. La boucle d’événements de Node.js vient ici à la rescousse, car elle traite les requêtes de manière non bloquante.
  5. Applications basées sur des API REST – JavaScript est utilisé à la fois dans le frontend et le backend des sites. Ainsi, un serveur peut facilement communiquer avec le frontend via des API REST en utilisant Node.js. Node.js fournit également des paquets comme Express.js et Koa qui facilitent encore plus la création d’applications web.

Node.js est-il un langage de programmation ?

En un mot : Non.

Node.js n’est pas un langage de programmation. Il s’agit plutôt d’un environnement d’exécution qui est utilisé pour exécuter JavaScript en dehors du navigateur.

Node.js n’est pas non plus un framework (une plateforme pour développer des applications logicielles). Le moteur d’exécution de Node.js est construit au-dessus d’un langage de programmation – dans ce cas, JavaScript – et permet de faire fonctionner les frameworks eux-mêmes.

Pour résumer, Node.js n’est ni un langage de programmation ni un framework, mais un environnement pour ceux-ci.

Node.js est-il frontend ou backend ?

Une idée fausse répandue parmi les développeurs est que Node.js est un framework backend et qu’il n’est utilisé que pour construire des serveurs. Ce n’est pas vrai : Node.js peut être utilisé aussi bien en frontend qu’en backend.

L’une des raisons pour lesquelles les frameworks Node.js sont un choix populaire pour les développeurs construisant un backend flexible et évolutif est sa nature événementielle et non bloquante. Cependant, les développeurs frontend verront tout aussi clairement ces avantages de Node.js dans leur propre travail.

Voyons pourquoi Node.js fonctionne à la fois pour le backend et le frontend :

  1. Réutilisabilité – JavaScript est un langage commun utilisé pour écrire à la fois le backend et le frontend à l’aide de frameworks comme Express.js et Meteor.js. Certaines piles populaires comme MERN utilisent Express.js comme backend (un framework Node.js). De multiples composants peuvent également être réutilisés entre le frontend et le backend.
  2. Productivité et efficacité des développeurs – Grâce à la réduction des changements de contexte entre plusieurs langages, les développeurs peuvent gagner beaucoup de temps. L’utilisation de JavaScript à la fois pour le backend et le frontend se traduit par une efficacité accrue, car de nombreux outils sont communs aux deux.
  3. Vaste communauté – Une communauté en ligne florissante contribue à la rapidité d’un cycle de développement réussi. Lorsque vous êtes bloqué sur un problème, il y a de fortes chances que quelqu’un l’ait déjà résolu et partagé la solution sur Stack Overflow. Node.js fait grand usage de cette communauté, qui est active et engagée lorsqu’il s’agit du runtime populaire et de ses paquets.

Débuter avec Node.js

Il peut être difficile de décider par où commencer avec Node.js. Heureusement, il est assez simple à installer, et vous pourrez ensuite le tester par vous-même.

Comment installer Node.js

Si vous avez déjà installé Node.js, vous pouvez passer cette section.

Sur macOS

En utilisant Bash sur Mac

curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"

En utilisant Homebrew sur Mac

brew install node

Sur Windows

Téléchargez le programme d’installation Windows directement depuis le site Web nodejs.org.

Sur Linux

Sur Ubuntu 18.04+, vous pouvez installer Node en utilisant les commandes suivantes.

sudo apt update
sudo apt install nodejs

Vérifier la version de Node.js installée

Dans la section précédente, nous avons installé Node. Vérifions-le en contrôlant la version installée. Exécutez la commande suivante dans le terminal.

node -v

Vous pouvez également le vérifier via la commande plus longue

node --version

Vous devriez voir une sortie similaire à celle-ci. Bien que le numéro de version puisse varier.

v14.16.0

Qu’est-ce que NPM ?

NPM est l’écosystème de paquets de Node.js. C’est le plus grand écosystème de toutes les bibliothèques open source au monde, avec plus d’un million de paquets et en pleine croissance. L’utilisation de NPM est gratuite et des milliers de développeurs open source y contribuent quotidiennement.

NPM est livré avec un utilitaire de ligne de commande. Vous pouvez simplement vous rendre sur le site web de NPM pour rechercher le paquet dont vous avez besoin et l’installer à l’aide d’une seule commande. Vous pouvez également gérer les versions de votre paquet, examiner les dépendances et même configurer des scripts personnalisés dans vos projets grâce à cet utilitaire de ligne de commande. Sans aucun doute, NPM est le bien le plus apprécié de la communauté Node.js ; Node.js attire un grand nombre de développeurs en grande partie grâce à son excellente prise en charge des paquets.

Installation de paquets NPM via CLI

Lorsque vous installez Node.js, NPM est automatiquement installé avec lui. Nous avons vu comment installer Node.js dans les sections précédentes, alors regardons maintenant la commande pour installer un paquet avec NPM :

npm install <package-name>

Oui, c’est aussi simple que cela ! Vous pouvez même installer plusieurs paquets à la fois :

npm install <pkg-1> <pkg-2> <pkg-3>

Vous pouvez également spécifier le drapeau -g (global) si vous souhaitez installer un paquet dans le contexte global. Cela vous permet d’utiliser le paquet n’importe où sur votre machine.

Lorsque vous initialisez une nouvelle application, NPM crée automatiquement un fichier package.json qui se compose de tous les paquets NPM. C’est ici que vous pouvez spécifier les versions, les dépendances et les scripts personnalisés.

Il existe une longue liste de commandes fournies avec l’utilitaire NPM, notamment publish, audit, run, etc. Vous pouvez vérifier comment les utiliser en utilisant la commande npm help.

Version de Node et npm.
Version de Node et npm.

Paquets populaires

Voici quelques-uns des paquets les plus populaires pour Node.js aujourd’hui :

  • Express – Express.js, ou simplement Express, est un framework de développement web inspiré de Sinatra pour Node.js, et la norme de facto pour la majorité des applications Node.js actuelles.
  • MongoDB – Le pilote officiel de MongoDB. Il fournit l’API pour les bases de données objet MongoDB dans Node.js.
  • Socket.io – Socket permet une communication en temps réel, bi-directionnelle et basée sur des événements.
  • Lodash – Lodash facilite le JavaScript en éliminant les difficultés liées à l’utilisation des tableaux, des nombres, des objets, des chaînes de caractères, etc.
  • Moment – Une bibliothèque de dates en JavaScript pour analyser, valider, manipuler et formater les dates.
  • Commander.js – Tout ce dont vous avez besoin pour travailler et construire avec des interfaces de ligne de commande pour node.js.
  • Forever – Un outil CLI simple pour s’assurer qu’un script donné s’exécute en continu (pour toujours). Permet de maintenir votre processus Node.js en production face à toute défaillance inattendue.
  • Async – Un module utilitaire qui fournit des fonctions simples et puissantes pour travailler avec le JavaScript asynchrone.
  • Redis – Une bibliothèque client pour supporter l’intégration de la base de données Redis.
  • Mocha – Un framework de test JavaScript propre et flexible pour Node.js et le navigateur.
  • Passport – Authentification simple et discrète pour Node.js. Le seul but de Passport est d’authentifier les requêtes.

Hello World en Node.js

Comme toujours, commençons par le programme de base « Hello World », où nous créons un serveur dans Node.js qui renverra une sortie « Hello World » lors d’une requête du serveur. Avant de vous lancer, assurez-vous de disposer d’un bon éditeur de texte.

Une fois que vous avez ouvert votre éditeur de texte, voici le code que vous utiliserez pour votre programme « Hello World » :

// server.js
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World! Welcome to Node.js');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Enregistrez ce fichier sous le nom de « server.js ». Maintenant, allez dans le terminal et démarrez le serveur en utilisant la commande :

node server.js

Le serveur devrait commencer à fonctionner. Pour vérifier le résultat, ouvrez http://localhost:3000 dans votre navigateur. Vous devriez voir le message –

Hello World! Welcome to Node.js

Explication du serveur Hello World

Node.js est livré avec un module intégré appelé « HTTP » qui permet à Node.js de transférer des données via le protocole de transfert hypertexte (HTTP).

Dans le code ci-dessus, nous chargeons d’abord le module http dans notre programme. Ensuite, nous utilisons la méthode createServer pour accepter une requête et renvoyer une réponse avec un code d’état. Enfin, nous écoutons sur un port défini.

Félicitations : vous venez de créer votre premier serveur en Node.js ! Dans la section suivante, nous allons apprendre à utiliser le framework Express pour créer un serveur.

Création d’un serveur à l’aide d’Express

Tout d’abord, nous devrions discuter de ce qu’est un serveur. Un serveur est responsable de la prise en charge des requêtes des clients par son logiciel (le plus souvent Apache ou Nginx), de l’exécution de l’ensemble des tâches requises et enfin du renvoi des réponses aux clients. Express est un framework qui nous aidera à créer un serveur dans Node.

Express.js est un framework d’application web Node.js minimal et flexible qui offre un ensemble robuste de fonctionnalités pour les applications web et mobiles. Il permet d’ajouter des tables de routage et de mettre en place des intergiciels dans votre application. Vous pouvez installer Express en utilisant la commande ci-dessous.

npm install express --save

Dans la section précédente, nous avons utilisé l’utilitaire http intégré pour créer un serveur. Maintenant, nous allons créer un serveur « Hello World » en utilisant Express.js.

Ouvrez votre éditeur de texte et saisissez ce code :


// server-express.js
const express = require('express')
const app = express() // initialize app
const port = 3000

// GET callback function returns a response message
app.get('/', (req, res) => {
res.send('Hello World! Welcome to Node.js')
})

app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`)
})

Ensuite, nous allons lancer notre serveur avec la commande suivante.

node server-express.js

Vérifiez maintenant http://localhost:3000 dans votre navigateur pour voir l’affichage de « Hello World ».

Résumé

En un mot, Node.js est un environnement de programmation populaire qui peut être utilisé pour créer des applications à grande échelle qui doivent prendre en charge plusieurs requêtes simultanées. Les E/S non bloquantes single thread en font également un excellent choix pour les applications en temps réel et les applications de flux de données.

Pour le renforcer encore, Node.js dispose d’une communauté massive de développeurs actifs et peut se vanter d’avoir le plus grand dépôt de paquets open source du monde, NPM, qui contient actuellement plus d’un million de paquets.

Il est facile de commencer avec Node.js. Nous avons vu comment installer et créer un serveur en Node.js, il ne reste donc plus qu’à réfléchir à la manière dont vous allez utiliser et mettre en œuvre Node.js dans votre propre pile. Vous pouvez également approfondir vos connaissances en consultant la documentation officielle de Node.js sur nodejs.dev.