On ne présente plus node.js. Je ne sais pas pourquoi on nous le présente souvent comme un tueur de PHP. On nous avait présenté aussi Ruby On Rail comme tel. Au final, PHP est toujours là, toujours aussi simple d'utilisation et d'apprentissage, avec ses qualités et ses défauts. Je vais essayer de parler de Node.js de ses qualités et de ses défauts. Il ne s'agit que d'une toute petite introduction. On nous dit qu'on peut créer des serveurs très robustes 100 000 connexions simultanées (et pourquoi pas 1 million aussi ).

Avant de commencer à lire et écrire du Node.js il est impératif de parfaitement maîtriser les notions de javascript objet. Si ce n'est pas le cas je vous conseille de lire Javascript POO de T.Templier et de bien assimiler (lien ci-dessous). Si vous êtes un crac de javascript objet je suis sur que vous connaissez Node.js sur le bout des doigts et cet article n'est pas pour vous.

 

Cet article va faire partir d'un ensemble, car le sujet est très très vaste.

Dans ce premier article on va se contenter de mettre une architecture de programme node.js qui tiens à peu près la route pour la plupart des applications.

Dans un autre, on verra la programmation asynchrone

Dans un autre le multi-core

Avec node.js on peut créer des applications qui communiquent entre le serveur et client (navigateur). On peut faire du push grâce au websocket (idéal pour faire des chat) etc ...

Avant de commencer un petit tour du côté de JavaScript objet.

http://t-templier.developpez.com/tutoriel/javascript/javascript-poo1/
http://t-templier.developpez.com/tutoriel/javascript/javascript-poo2/
http://t-templier.developpez.com/tutoriel/javascript/javascript-poo3/

 

Si vous suivez sur Twitter (c’est bien ;) ) vous savez que j’ai passé une formation Node.js avec Nicolas Chambrier. Cet article est en quelque sorte ma mémoire suite à cette formation.

 

Npm le copain de Node.js

Node.js est quasi indissociable de npm (Node Packaged Modules), c’est avec lui que vous téléchargerez la plupart des packages. Un conseil allez vite voir la doc. C’est aussi avec lui que vous pourrez partager vos modules et projet avec la terre entière (revers de la médaille, c’est le foutoir le plus complet).
Comme copain à node.js on ajoutera rdis, cette “base de donnée” No SQL bien pratique et qui se charge en mémoire (d’où son extrême rapidité, idéal pour le temps réel)

 

L'intérêt de Node.js

- Développement simple et rapide (lorsqu’on est habitué ;) )
- Performances du paradigme asynchrone, car la puissance de Node vient de son utilisation Asynchrone (voir le schéma du roi de Nicolas, modifié par mes soins).
- Du temps réel au sens Web du terme
- L’apprentissage d’un seul langage entre un backoffice et le front (attention ne veut pas dire que tout est utilisable entre les 2 environnements)
- Programmation Scalable
...

Des défauts

Son principal défaut est que c’est un langage jeune. Il a été crée en 2009
- Peu d’outils de débug (vive le console.log)
- Beaucoup trop de modules pour une même chose (le foutoir dans npm)
- Mono Thread (mais Scalable)

Quelques notes utiles

Node.js fonctionne avec le moteur JavaScript V8 (Google)

Installation de node.js et ces copains

Nodes.js existe sous tous les environnements. Pour l’installation c’est ultra simple allez sur le site http://nodejs.org/ et faire install. On peut aller aussi sur la page de téléchargement http://nodejs.org/download/

Pour Ubuntu le plus simple est peut être de passe par le dépôt add-apt-repository ppa:chris-lea/node.js

Pour linux en général la ligne magique sera

    cd /usr/local && sudo tar --strip-components 1 -xzf \

                         /path/to/node-<version>-<platform>-<arch>.tar.gz

Node tout seul se sentira bien seul et on peut déjà télécharger avec npm (le gestionnaire de packet qui marche bien avec node ;) )

sudo npm install -g express (Express est un peu à node.js ce qu’est Rail à Ruby ;) )(si je me fais pas troller avec ça)

sudo npm install -g async (très bien pour la programmation asynchrone)

On va installer supervisor (on peut aussi utiliser nodemon qui fait la même chose). Supervisor se chargera de relancer l’application sans devoir faire un stop and go à chaque changement de cette dernière. Du coup, au lieu de faire, node monapp.js pour lancer l’application, on fera supervisor monapp.js

sudo npm install -g supervisor

Installation de redis, télécharger les sources ici ->  http://redis.io/download

Pour Linux il faut compiler, pour windows il suffit de dépacker et lancer redis-server

$ wget http://download.redis.io/releases/redis-2.8.2.tar.gz
$ tar xzf redis-2.8.2.tar.gz
$ cd redis-2.8.2
$ make

Les binaires sont dans src/redis-server

 

 

Maintenant qu’express est installé on va pouvoir facilement initier un projet (je ne sais pas pourquoi c’est souvent une application de message qui est proposée)

On va utiliser les sessions et les template ejs (par défaut c’est jade)

jbaptiste@Ubuntu-v2:~/node$ express --sessions -template ejs messages

 

   create : messages 
   create : messages/package.json
   create : messages/app.js
   create : messages/public
   create : messages/public/javascripts
   create : messages/public/stylesheets
   create : messages/public/stylesheets/style.css
   create : messages/routes
   create : messages/routes/index.js
   create : messages/routes/user.js
   create : messages/views
   create : messages/views/index.ejs
   create : messages/public/images

 

   install dependencies:

     $ cd messages && npm install

   run the app:

     $ node app

 

Pour finir il faut fait installer les dépendances (‘express par exemple …’ ) .

On va dans le répertoire messages (cd messages)

et on entre la commande

 npm install

 

Lancer l’application

Pour lancer un programme node.js la ligne de commande est la suivante. Pour notre exemple ci-dessus, on se place dans le répertoire messages et on tape

node app.js

 

Si il s’agit d’un serveur http on utilisera la commande suivante. Elle aura l’avantage de faire un restart automatique à chaque modification de l’application

supervisor app.js

 Node.jsimg 003

Conclusion de l’introduction

Il est clair cette introduction ne sert strictement à rien si ce n'est poser les bases d'une application node.js. Dans le prochain article, on va améliorer cette application de messages en ajoutant, les sessions, le rafraîchissement et bien entendu, la saisie du message.

Amusement

Pour m’amuser j’ai fait un petit contrôle de rapidité avec la suite de Fibonacci avec comme argument 30. Bien entendu ce n’est peut être représentatif d’une application opérationnelle, cela donne tout de même une idée.

Résultat 0.2 seconde pour node.js, 47 secondes pour php

 Node.jsimg 001 Node.jsimg 002 


Vous avez aimé cet article ? Alors partagez-le avec vos amis en cliquant sur les boutons ci-dessous :


Commentaires (3)

  • Invité - RadicalEd

    <p>Salut !</p><p>Article intéressant en effet. Je pratique Node.js depuis plusieurs semaines maintenant et j'apprécie sa vélocité mais il faut le dire, Node n'est pas adapté à tout les besoins. Beaucoup de gens le compare à php mais je penses que ça ne se compare pas. Personnelement pour un site e-commerce pas sur que je choisisses Node. Par contre pour du realtime, du push ou du Rest alors là pas la peine d'hésiter, c'est taillé pour :)</p><p>Sinon je rebondie sur :</p><p>"Peu d’outils de débug (vive le console.log)"</p><p>Vrai et faux. Sous Windows avec Visual Studio (y compris Express la version gratuite) tu as NTVS qui inclut tout ce qu'il faut (<a href="/https://nodejstools.codeplex.com/)" rel="nofollow">https://nodejstools.codeplex.c...</a>.</p><p>Pour OSX ou Linux je conseille fortement Webstorm (<a href="/http://www.jetbrains.com/webstorm/)" rel="nofollow">http://www.jetbrains.com/webst...</a>;, qui pour un prix dérisoire (gratuit si tu bosse sur des projets open-source) remplit parfaitement son rôle :)</p><p>A++</p>

  • Invité - Frederick Revealer

    <p>Ton article est intéressant mais dans les faits, certaines choses s'avèrent plus compliqué à entreprendre qu'en PHP.<br>Exemple, je souhaite lire des packets; habituellement (en PHP), je fais un fsockopen, fwrite et fread et le problème est réglé; avec Node.js, cela m'a été impossible du fait qu'il faut installer un executable (winpcap) puis le npm cap sauf que dans les faits, ça ne fonctionne pas.</p><p>C'est à dire que winpcap, c'est un site très mal pensé, en anglais, avec des indications flous sur la manière d'utiliser ce programme (tout ça pour lire des packets...).</p><p>Bref, de mon point de vue, ça m'a refroidit et je pense qu'il faut arrêter de vendre Node.js comme un remplaçant de PHP, rien n'est unifié, ça n'est pas mature et pourtant j'ai fais des efforts de recherches.</p><p>La seule chose que je suis parvenu à faire c'est l'utilisation de <a href="/http://socket.io" rel="nofollow">socket.io</a> et de la lecture de fichier fs.watchFile que je trouve pratique et pour ça les npms on suffit mais malheureusement pour des opérations plus "lourdes", Node est un peu faible et mal documenté.</p>

  • Invité - Baptiste Jerome

    Invité - Frederick Revealer

    <p>Merci pour ce commentaire. Je viens de m apercevoir que je n est pas fini la conclusion !!! Ce qui plait dans node.JS c'est qu'il reste beaucoup à faire. Maintenant node.JS est jeune et il me semble qu'il faut l utiliser avec parcimonie. Il me semble un peu prématuré de le proposer comme remplaçant de PHP. Je pense que pour le moment les deux ont tout intérêt de cohabiter je les trouve assez complémentaire. En revanche à moyen terme il y a de fortes chances que node.JS dépasse PHP en terme d'utilisation.<br>Effectivement du fait que node.JS soit mono thread on essaie de déléguer un maximun de choses à des programmes externes (winpcap). Ainsi on ne bloque pas node.JS. La force de node.JS est bien d être asynchrone.<br>Comme le disait le formateur, npm c'est un peu la jungle y a de tout et on passe un temps fou à trouver le bon module...</p>

Poster un commentaire en tant qu'invité

0

Publicité

 

Invité - Laeti
Merci beaucoup pour ce tutoriel super clair
Configurer alerte mail avec Sr... dans Article de Joomla
Invité - anatole
Ok, c'est pas vraiment le top les planches en particules, la colle et les planches ont tendances à g...
Les oiseaux sauvages sont reve... dans Article de Joomla
Bonjour

Il ne devrait pas y avoir de soucis pour la France en 4G mais sera un peu limité. Il pas...
Choisir son téléphone en fonct... dans Article de Joomla
Invité - Lebon974
Bonjour, j'ai en vu d'acheté prochainement un téléphone, et je souhaiterais savoir si celui-ci serai...
Choisir son téléphone en fonct... dans Article de Joomla
Bonjour
Pour les Sricam SP015 et SP017 je ne sais pas. Pour la SP012, j'ai du changer le mot de pa...
Configurer alerte mail avec Sr... dans Article de Joomla