lundi 19 novembre 2012

Les moteurs de node.js


Les moteurs de Node : Un V8 et.. un réacteur.

Article écrit dans le cadre de la série:  Node pour les 'pas tout à fait' nuls.

Le moteur V8.

Node n'a pas été écrit à partir de rien. Au contraire c'est un assemblage léger autour du moteur d'exécution javascript le plus répandu au monde : le moteur javascript 'V8' de google chrome.


Vous avez sur le site de liz Stinson des très bons articles sur l'architecture des navigateurs et de V8.
Ce moteur est utilisé chaque fois que votre navigateur Chrome a besoin d’exécuter du javascript.

La relation entre Node.js  et Chrome est un des facteurs du dynamisme du projet : les utilisateurs de Node poussent toujours plus loin l'usage de V8, ce qui profite directement au navigateur Chrome et réciproquement  toutes les améliorations du V8 profitent à la communauté Node.js.

Le réacteur. 

Le V8 fournit la coquille de  la machine virtuelle mais pas le mécanisme utilisé par Node.
Node est basé sur un modèle de traitement appelé : Event Model. La traduction n'est trop parlante: modèle évènementiel. 
Ce dispositif est avant tout un modèle de conception (design pattern), le reactor pattern.


L'idée de base est la suivante: node va lire la suite des instructions contenue dans votre programme javascript. Il va insérer  dans une boucle des agents chargés de guetter des évènements.Quand un évènement survient , l'agent chargé de le surveiller va déclencher QUAND SON TOUR viendra, une série d'action en rapport avec l’évènement à traiter (la fonction de rappel ou callback). 

Aussi, plus le nombre d’évènement à surveiller augmente, plus le nombre d'agent de surveillance va augmenter et plus le parcours de la boucle sera long. 

Les Entrées-Sorties non-bloquantes. 

Un réacteur fonctionnera parfaitement que s'il arrive à faire le tour de ses agents dans un temps raisonnable et qu'aucun agent ne monopolise son attention. Les fonctions d’entrées-sorties (disque ou réseau)  sont les opérations qui génèrent le plus de temps de latence.
Comparaison des vitesses RAM et E/S

 Aussi , il ne faut pas que le système attende l'achèvement  d'une telle fonction pour continuer sa ronde. Le principe des E/S non bloquantes  est simple: je lance une opération sur le réseau ou le disque  et je charge un observateur de m'avertir de la conclusion de l'opération, pendant ce temps, je passe à l'opération suivante. 
Ainsi la ligne d'appel d'une opération non bloquante sera de la forme:

 res.on('data', function(d) {
    process.stdout.write(d);
  });

Le système va charger un agent de surveiller l'arrivée de l’évènement 'data' et dans ce cas, de  lancer la procédure de rappel (callback ) associée.

Pour des fonctions plus simples, l’évènement peut implicitement correspondre à la fin de l'opération:

fs.readFile('/etc/passwd', function (err, data) {
  ... } ) 

Cette ligne déclenche la demande de lecture du fichier, puis une fois l'acquisition réalisée, appellera la fonction de rappel.

Ce mode de fonctionnement est la mise en oeuvre d'une forme de programmation particulière: la programmation asynchrone.(A détailler dans un article).

La communauté.

Node est issu du cerveau génial de Ryan Dahl qui est un ovni dans la planète du Net.

Ryan Dahl , le créateur de Node.js a complété le moteur V8 de Chrome pour lui permettre de réaliser des opérations qui ne sont pas prévues en javascript pour un navigateur. On peut citer par exemple l'accès au système de fichier : cette fonction est interdite pour un navigateur.


L'aventure a commencé en 2008 et connait depuis une progression vertigineuse.
  • En 2009 : Node c'est 8000 lignes de  C/C++ et  2000 lignes de Javascript, 14 contributeurs. 
  • En 2010 : Node c'est 11000 lignes of C/C++ et  6000 lignes de JavaScript,  63 contributeurs.


En 2012:  17 881  librairies javascript.

Cette communauté est fédérée autour d'un référentiel des librairies pour Node : npm (Node Packaged Modules)



Licences.

Enfin pour terminer, Node.js est sous licence MIT, le moteur V8 sous licence BSD. Ces licences vous garantissent le caractère 'libre' de Node.js sans aucune restriction.


A venir: qui utilise Node et pour quoi faire



Aucun commentaire: