mardi 7 août 2018

Introduction à Node.js


Node.js est une nouvelle technologie très utilisée à la Silicon Valley, notamment par Microsoft, VMware, eBay, Yahoo, LinkedIn, etc …  pour n’en citer que quelques uns.
Dans cette série d’articles, on va voir comment node.js offre de nouvelles opportunités aux développeurs.
Peut-être que vous avez entendu parler de Node.js, et vous savez qu’il est utilisé pour des applications « temps réel » ou qui demande de la «haute performance », et vous savez certainement que Node.js est du JavaScript côte-serveur, mais vous n’êtes pas sûrs quand et/ou pourquoi l’utiliser, rassurez-vous dans ce tutoriel, je vais tenter de vous expliquer quand l’utiliser et pourquoi.

Quand choisir Node.js ?

A l’époque du Web 2.0, le web est devenu plus interactif. Les utilisateurs autour du monde ont besoin d’interagir entre eux et ceci en temps réel. Le tchat, les jeux en ligne, réseaux sociaux, ainsi que les outils collaboratifs  sont des applications qui demandent une communication en temps-réel entre les utilisateurs. Cette communication en « temps-réel » doit se produire à grande échelle, en supportant des millions de requêtes.

Intro à Node.JS

Node.js est un environnement créé par Rayn Dahl en 2009 qui s’appuie sur le JavaScript exécuté côté serveur. Comme le montre le schéma ci-dessous il est principalement basé sur libuv, le moteur V8 JavaScript de Google utilisé dans le navigateur Google chrome, et le langage JavaScript.
node-1
A noter que Node.js n’est pas un Framework web, pour avoir une idée sur ces différents Framework de Node.js, je vous conseille de voir ce lien : http://webapplog.com/node-js-frameworks/ parmi d’autres.
Dans ce tutoriel, j’explique brièvement la différence entre fonction bloquante et non bloquante à travers un exemple, et pour clôturer, j’expliquerai l’utilité de la boucle d’évènement dans Node.js.
Pour commencer Node.js il faut comprendre la différence entre Node.js est les environnements des langages de script exécutés côté serveur tel que PHP.

La programmation asynchrone (ou non-bloquante)

J’illustre ici le principe de la programmation bloquante et la programmation non-bloquante, avec ce pseudo-code.
Par exemple un code bloquant sera de la forme suivante :
Lire le fichier à partir du système de fichier, stocker le contenu dans "contenu"
Afficher contenu
Faire autre chose
Avec cette version on ne peut pas afficher le contenu tant que l’on a pas lu tout le contenu à partir du fichier (on ne peut pas faire autres chose tant que la lecture et l’affichage ne sont pas faits), car on a trois instructions bloquantes en série.
Une version non-bloquante du code sera de la forme suivante :
Lire le fichier à partir du système de fichier
       Et quand tu as fini, affiche contenu
Faire autre chose
Avec cette version on peut lire le contenu à partir du fichier et quand la lecture est finie on pourra l’afficher. Entre temps, on passe à l’instruction suivante sans attendre le retour de la fonction qui la précède, ce qui permet en quelque sorte un « pseudo-parallélisme » même en sachant que Node.js n’est pas multithread. Cette technique est ce qu’on appelle «callback ».
Si on veut traduire ce code bloquant, ça sera :
var contenu = fs.readFileSync('/etc/hosts');
console.log(contenu) ;
console.log('Faire autre chose');
La version non-bloquante sera :
fs.readFileSync('/etc/hosts', function(err, contenu ){
    console.log(contenu);
});
console.log('Faire autre chose');
A noter que la plupart des fonctions contenues dans Node.js sont des fonctions asynchrones (c’est-à-dire des fonctions qui ne reste pas bloquées en attendant qu’une autre fonction soit terminée). C’est pour cela que le langage JavaScript est un de ces principaux composants comme le montre le schéma précèdent, car il permet l’utilisation des fonctions callbacks.
Comme mentionné au début de cet article, node.js est un environnement, ce qui signifie que certains fonctionnalités ne sont pas accessibles avec l’installation par défaut. Il est cependant très facile de charger des librairies externes créées par la communauté pour la majorité des besoins « classiques ». La création d’un serveur web peut par exemple être facilement réalisé avec la librairie « Express ».

Boucle d’évènements (Event Loop)

Je me permets de traduire ce que Rayn Dahl a dit à propos du choix du langage JavaScript:
« Le langage JavaScript a certaines caractéristiques qui le différencie des autres langages dynamiques. Il n’a pas de concept de threads, son modèle de gestion de la concurrence est complètement basée autour des évènements. »
JavaScript nous permet de faire la programmation événementielle en utilisant la boucle d’évènements et d’écrire un code asynchrone (non-bloquant).
Alors qu’est-ce que la boucle d’évènements ?
La boucle d’évènement est une file FIFO (First-In-First-Out). Lorsqu’une fonction asynchrone est exécutée, les fonctions callbacks sont ajoutées dans la file, et le moteur JavaScript ne démarre pas le traitement de la boucle d’événements jusqu’à ce que le code qui est après la fonction asynchrone soit exécuté. Puisque la boucle d’évènement est une file (FIFO) les fonctions callbacks s’exécutent dans l’ordre où elles étaient ajoutées à la file d’attente.

Conclusion

Node.js est un environnement qui permet d’exécuter JavaScript côte serveur, offrant de hautes performances pour des applications temps-réel grâce à son modèle mono-thread.
Dans le prochain tutoriel nous allons installer Node.js via le gestionnaire de version de Node (NVM) dans un environnement Ubuntu.

Aucun commentaire:

Enregistrer un commentaire

to criticize, to improve