Quand utiliser NodeJS?

Je suis nouveau ici, dernièrement, j’ai beaucoup entendu parler de la qualité de Node.js. Considérant à quel point j’aime travailler avec jQuery et JavaScript en général, je ne peux pas m’empêcher de me demander comment décider quand utiliser Node.js?

Je vois que Node.js est particulièrement adapté aux applications où vous souhaitez maintenir une connexion persistante du navigateur au serveur. En utilisant une technique connue appelé « long-polling », vous pouvez écrire une application qui envoie des mises à jour à l’utilisateur en temps réel. Faire du long polling sur de nombreux géants du Web, comme Ruby on Rails ou Django, créerait une charge énorme sur le serveur, car chaque client actif consomme un processus serveur. Cette situation équivaut à une attaque de type tarpit. Lorsque vous utilisez quelque chose comme Node.js, le serveur n’a pas besoin de maintenir des threads séparés pour chaque connexion ouverte.

Cela signifie que vous pouvez créer une application de chat basée sur un navigateur dans Node.js qui ne prend presque aucune ressource système pour servir un grand nombre de clients. Chaque fois que vous souhaitez effectuer ce type de connexion à long terme, Node.js est une excellente option.

Il est intéressant de mentionner que Ruby et Python ont des outils pour faire ce genre de choses (eventmachine et twisted, respectivement), mais que Node.js le fait exceptionnellement bien, et depuis le début. JavaScript est exceptionnellement bien situé pour un modèle de concurrence basé sur les callbacks, et il excelle ici. De plus, la possibilité de sérialiser et de désérialiser avec du JSON natif à la fois pour le client et pour le serveur est assez géniale.

Il est important de préciser que Node.js est également idéal pour les situations dans lesquelles vous réutiliserez une grande partie du code à travers le lien client/serveur. Le framework Meteor rend cela très facile, et beaucoup de gens suggèrent que cela pourrait être l’avenir du développement web. Je peux dire par expérience qu’il est très amusant d’écrire du code dans Meteor, et une grande partie de cela consiste à passer moins de temps à réfléchir à la façon dont vous allez restructurer vos données, afin que le code qui s’exécute dans le navigateur puisse facilement les manipuler et les renvoyer.

Je pense que Node.js est le mieux adapté aux applications en temps réel : jeux en ligne, outils de collaboration, salons de discussion, ou tout ce qu’un utilisateur (ou un robot ou un capteur) fait avec l’application doit être vu par les autres utilisateurs immédiatement, sans rafraîchissement de la page.

Je dois également mentionner que Socket.IO, combiné à Node.js, réduira votre latence en temps réel encore plus que ce qui est possible avec un système de polling long. Socket.IO se rabattra sur le polling long dans le pire des cas, et utilisera à la place les sockets web ou même Flash s’ils sont disponibles.

Mais je dois aussi mentionner que Node.js est la solution idéale pour toutes les situations où le code risque de se bloquer à cause des threads. Ou toute situation où vous avez besoin que l’application soit pilotée par des événements.

Node.js rivalisent étroitement avec Nginx pour les vieilles requêtes HTTP ordinaires. Donc, si nous construisons avec Node.js, nous pouvons servir nos ressources normales de manière assez efficace, et lorsque nous avons besoin d’une application pilotée par les événements, elle est prête à la gérer.

De plus, c’est tout JavaScript, tout le temps.

Raisons d’utiliser NodeJS :

  • Il exécute Javascript, ce qui vous permet d’utiliser le même langage sur le serveur et le client, et même de partager du code entre eux (par exemple pour la validation de formulaires).

  • Le système piloté par les événements à un seul thread est rapide, même lorsqu’il traite de nombreuses requêtes à la fois, et également simple, par rapport aux frameworks Java ou ROR traditionnels à multi-threads.

  • Il est devenu l’environnement standard de facto dans lequel exécuter des outils liés à Javascript et d’autres outils liés au Web, y compris des task runners, minifiers, beautifiers, linters, des préprocesseurs, des bundlers et des processeurs analytiques.

  • Il semble tout à fait adapté au prototypage, au développement agile et à l’itération rapide de produits.