Hé, les gars, dans cet article nous allons comparer Node.js versus Ruby on Rails pour le développement Web. La raison principale pour laquelle j’ai écrit cet article est que notre équipe se fait constamment demander quel langage ou quel framework est le meilleur à apprendre. De toute façon, nous ne donnons jamais de réponse simple parce qu’il n’y a pas de réponse claire et nette. Je pense donc que la meilleure chose à faire est d’examiner tous les faits et statistiques. Nous allons examiner certains des avantages et des inconvénients de Node.js et de Ruby on Rails pour les technologies côté serveur. Avant de commencer, j’aimerais faire quelques remarques. Nous pouvons déjà entendre les critiques qui disent : comment allez-vous comparer Node.js, qui est un runtime, à Ruby on Rails, qui est un framework ? Je comprends l’argument, mais ce que je vais comparer, ce sont les deux technologies côté serveur et les deux piles web. Maintenant, soyons clairs sur ce qu’il vaut mieux apprendre maintenant et ce qu’il vaut mieux mettre en œuvre pour une entreprise. Je ne dis pas qu’il faut comparer directement les caractéristiques de Ruby on Rails à celles de Node.js si cela vous fait vous sentir mieux de remplacer Node.js par quelque chose comme Express ou d’autres frameworks basés sur Node. Quoi qu’il en soit, nous comparons les structures et les piles de backend, et non les technologies individuelles. Notre équipe a travaillé avec les deux technologies et certains d’entre nous aiment les deux technologies. Je ne promeus pas l’une plutôt que l’autre. Il est également important de comprendre que ce qui fonctionne pour nous peut ne pas fonctionner pour vous et vice versa. N’oubliez pas non plus que le cerveau de chacun est différent. Il n’y a pas de réponse à l’emporte-pièce pour cette question.
Allons-y et commençons par examiner certaines des similitudes entre les deux technologies.
- Technologies populaires côté serveur.
- Assez facile à apprendre.
- Hautes performances.
- Utilisé par les meilleurs sites web/applications.
- Forte communauté.
- Similaire à la structure basée sur MVC.
- Développement rapide.
Les deux Node.js et Rails sont des technologies côté serveur très respectées et populaires qui peuvent faire beaucoup de choses différentes. Ils peuvent travailler avec de nombreuses piles et bases de données différentes et ainsi de suite. Les deux sont assez faciles à apprendre. Node utilise JavaScript et Rails utilise Ruby. Mais Ruby et JavaScript sont plus faciles à apprendre que quelque chose comme Java, C# ou certains de ces langages de niveau supérieur. Ces deux langages sont plutôt indulgents et il existe une tonne de ressources pour les apprendre. Node.js et Ruby on Rails sont très performants et nous allons parler du niveau de performance. Il existe de nombreux exemples de sites Web populaires qui utilisent ces deux technologies. Node et Rails ont des communautés très fortes et opiniâtres.
Rails existe depuis un peu plus longtemps et compte plus de vieux routiers. Mais Node devient de plus en plus populaire chaque jour. Maintenant, MVC ou Model-View-Controller est un modèle conçu. Et Ruby on Rails a un MVC dur. Vous avez un dossier pour vos modèles, vos contrôleurs et vos vues. MVC est possible avec certains frameworks de Node comme Express. Cependant, Express est beaucoup plus flexible dans sa structure que ne l’est Rails. Vous pouvez juste prendre certains aspects du MVC. Ce n’est pas la seule structure possible. Node et Rails sont utilisés pour le développement rapide et le prototypage. Rails a une impressionnante fonctionnalité de pliage et Express a des générateurs et des outils en ligne de commande également.
Avantages de Rails
- Structure cohérente.
- Très opiniâtre.
- Migrations de bases de données.
- Vitesse de développement.
- Ruby est un grand langage.
- Ruby gems.
- Maturité et communauté respectée.
D’abord, nous allons jeter un coup d’œil aux avantages de Ruby on Rails et ensuite aux inconvénients. Comme je l’ai dit, Rails a une structure MVC très forte. La plupart des applications Rails seront très similaires en termes de fichiers et de dossiers de base. Vous disposez de cette base solide, sur laquelle vous pouvez ensuite construire avec des gemmes, des paquets et des bibliothèques personnalisés. En outre, Rails est très obstiné, ce qui signifie qu’il vous fait adhérer à sa façon de faire les choses. Rails part du principe que vous allez écrire du code d’une certaine manière et certaines personnes peuvent dire que c’est un peu restrictif. Mais cela rend le code plus facile et plus propre, et il est plus difficile de créer des erreurs et des problèmes. Ce n’est pas restrictif dans le sens où vous ne pouvez pas créer ce que vous voulez, mais juste la façon dont vous allez y arriver. Si vous le faites de la bonne façon, ce sera très probablement le chemin le plus facile.
Rails a également une très bonne fonctionnalité de migration de base de données. Ils nous permettent de faire des choses comme créer et modifier des tables et des colonnes dans notre base de données sans avoir à aller manuellement et ajouter ou modifier des choses. Il vous donne également un joli petit journal ou chemin que vous pouvez suivre pour voir exactement ce qui a été fait à la structure de votre base de données.
Maintenant à Node. Il y a quelques paquets ou modules pour les migrations comme DB-migrate qui peuvent fonctionner vraiment bien, mais ce n’est pas aussi approfondi et facile à utiliser que le système de migration de l’accord Rails. Lorsqu’il s’agit de prototypage et de développement rapide, il n’existe pas beaucoup de technologies qui peuvent battre Rails. Ainsi, avec une configuration de base et quelques commandes d’échafaudage, vous disposez d’une application CRUD entièrement fonctionnelle. Les migrations de bases de données sont ajoutées à cette vitesse. Node.js et Express sont assez performants en matière de développement rapide si vous utilisez des outils et des modules tiers. Mais Rails a toutes ces choses dès la sortie de la boîte.
Il y a des avantages et des inconvénients au langage Ruby mais pour la plupart, il est bien respecté et il est très propre. Ruby est un langage multi-paradigme, vous pouvez faire du code procédural fonctionnel, mais pour la plupart, c’est orienté objet. Tout peut être considéré comme un objet. RubyGems est un gestionnaire de paquets pour Ruby on Rails et il est utilisé pour étendre les fonctionnalités de base du framework. Il est similaire à npm pour Node.js. Toutes les applications Rails ont un fichier gem où vous pouvez spécifier vos gems. Ensuite, vous pouvez exécuter une commande bundler pour les installer toutes, de manière similaire à npm install avec Node.js.
Une autre grande chose à propos de Ruby on Rails est qu’il existe depuis un certain temps et qu’il a une communauté très respectée et intelligente. Les développeurs qui maintiennent Ruby on Rails sont extrêmement intelligents et très passionnés par le framework. Il y a une tonne de ressources sur le framework de base, notamment des forums, des articles de blog et de la documentation pour vous aider si vous êtes bloqué. Ce sont là soem des grands avantages de Ruby on Rails.
Inconvénients de Rails
- Performance
- Trop simple
- Popularité
- Manque de documentation
Parlons de certains des inconvénients. Certaines des plus grandes plaintes que nous avons entendues à propos de Ruby on Rails sont qu’il est relativement lent. Rails est un grand framework avec beaucoup de fonctionnalités dans son noyau. Tout comme certains des frameworks plus légers, il faut également tenir compte des dépendances des gemmes et des fichiers d’application. Il y a tellement d’automatisation et d’échafaudage que le développeur n’apprend pas grand-chose sur le fonctionnement du framework Rails. Vous pouvez connaître le langage Ruby, la syntaxe ou la structure de votre application, mais pour quelqu’un qui comprend vraiment le fonctionnement de Rails, c’est une excellente solution en raison de son développement rapide. D’un autre côté, certains développeurs doivent vraiment faire des efforts supplémentaires pour comprendre certaines choses. Rails est également beaucoup plus difficile pour les grands projets que pour les petites applications. Il peut avoir quelques problèmes avec la mise à l’échelle aussi.
Donc un autre inconvénient est que Rails n’est pas aussi populaire que Node.js. En ce moment, Node.js est à la pointe du développement web et l’engouement pour Rails a vraiment baissé. À notre avis, si vous cherchez un emploi, nous vous conseillons d’apprendre Node et probablement Express. Les entreprises sont plus nombreuses à embaucher des développeurs JS que n’importe quel autre langage. Si c’était il y a cinq ans, Rails ou Ruby serait l’un des trois principaux langages à apprendre. Mais de nos jours, il n’est pas aussi populaire. J’ai donc brièvement mentionné plus tôt que le noyau du framework Rails dispose d’une très bonne documentation et d’exemples, vous permettant d’apprendre des commandes d’échafaudage simples et la migration de bases de données. Tout cela est très bien. Cependant, lorsque vous essayez d’apprendre une programmation plus avancée et que vous essayez d’apprendre des gemmes spécifiques, vous avez parfois l’impression de chercher une aiguille de Newton dans une botte de foin.
Certains assez grands noms ont utilisé ou utilisent Ruby on Rails dans leur plateforme. Je ne pense pas que vous pouvez obtenir beaucoup plus grand que Twitter. En outre, ils ont déplacé beaucoup de leurs services backend vers Scala et Java en raison de certains problèmes de mise à l’échelle. Mais ils ont utilisé Rails pendant longtemps et je suis presque sûr qu’ils l’utilisent encore dans d’autres aspects de leur plateforme, comme leur partenariat avec Shopify. En outre, Basecamp, qui est une solution de gestion de projet, a déclaré que Rails était le cœur et l’âme de son projet. Le logiciel qui fait fonctionner GitHub a été construit sur Rails. Soundcloud et Hulu, qui est un service de streaming populaire, ont été construits sur Rails. Depuis le début, Groupon et LivingSocial, SlideShare, et Urban Dictionary ont utilisé Rails dans leur developemtn.
Node.js Avantages
- Extrêmement populaire.
- Haute performance.
- Asynchrone.
- Très évolutif.
- JavaScript front et backend.
- Structure de fichier flexible.
- npm et modules.
Maintenant que nous avons examiné Rails, commençons à examiner Node.js. Nous allons commencer par les avantages. Un énorme avantage de Node.js est son extrême popularité. Il s’agit en fait de la nouvelle technologie de pointe en matière de développement web. Il y a une très forte demande du marché. C’est extrêmement populaire pour les startups. Il existe une communauté open-source florissante autour de Node et du framework Express. Il y a beaucoup de modules bien développés sur npm, et quand il s’agit de vitesse et de performance, Node fait tomber Rails hors de l’eau. En fait, il fait tomber n’importe quoi hors de l’eau. Il fonctionne sur le moteur JavaScript de Google, qui est rapide comme l’éclair. Node est utilisé pour construire des applications web en temps réel qui se sentent presque comme des applications de bureau.
Puis, Node.js est également asynchrone. Cela signifie que lorsqu’un programme envoie une requête au serveur, il n’a pas besoin d’attendre la réponse. Il peut continuer à s’exécuter. Node fonctionne sur un seul thread, contrairement aux autres langages qui envoient la requête. Ils attendent que la requête soit terminée, puis envoient la suivante et ainsi de suite. Ainsi, Node.js est également très évolutif et le fait d’être sur un seul fil joue un rôle important à cet égard. Node fonctionne également très bien avec les bases de données NoSQL comme MongoDB, qui sont beaucoup plus évolutives que les bases de données relationnelles traditionnelles comme MySQL. Presque toutes les grandes entreprises sur lesquelles j’ai lu sont passées à Node.js, et elles ont signalé au moins une augmentation décente de la productivité.
Un autre grand avantage de Node est qu’il utilise JavaScript, qui est largement utilisé avec de nombreuses piles web. Très souvent, le langage sur le front-end est différent du back-end, mais ce n’est pas le cas en utilisant Node.js. Nous utilisons JavaScript sur le front-end et le back-end. Il y a une tonne de frameworks côté client qui dominent l’industrie – React, Angular, Vue.js. C’est donc un énorme avantage pour Node.js. Évidemment, JavaScript fonctionne également bien avec les API JSON, qui sont très populaires.
Node.js, Express, ou Happy.js, n’importe lequel de ces frameworks a une structure de fichier vraiment flexible. Ils vous permettent de construire vos applications comme vous le souhaitez. Vous pouvez tout bloquer dans un seul fichier JS d’application. Si vous voulez avoir une structure MVC plus traditionnelle, je pense qu’il y a des bons et des mauvais côtés à cela. Mais dans la plupart des cas, si vous savez ce que vous faites et que vous êtes un bon programmeur, la flexibilité est une bonne chose. Comme les gems Ruby, Node a aussi son propre gestionnaire de paquets appelé npm, ou Node package manager. La plus grande différence entre npm et Ruby gems est la façon dont les dépendances sont gérées. Avec Ruby, les dépendances sont installées globalement. Vous devez donc utiliser un bundler et les gérer vous-même. npm s’occupe de tout cela pour vos modules. Ils sont placés dans le dossier des modules de Node. Ensuite, ces modules peuvent également avoir leur propre dossier de modules Node avec leurs propres dépendances. Les modules npm semblent également avoir une meilleure documentation, du moins dans mon expérience.
Node.js Inconvénients
- Sucks pour les tâches intensives en CPU.
- Inconsistance.
- Nouvelle technologie.
- Callback hell.
- Trop modulaire.
Nous avons donc examiné les points positifs et les avantages de Node.js. Maintenant, regardons quelques inconvénients. Aussi bon que Node soit pour de nombreuses applications de style CRUD, il est absolument nul pour les applications qui sont intensives en CPU. La raison en est qu’à chaque fois qu’il fait quelque chose qui prend du temps, comme une opération CPU, il mettra en file d’attente toutes les demandes entrantes parce qu’il fonctionne sur un seul thread. Quelque chose comme Apache, qui a plus de threads disponibles, va diviser ce temps CPU entre eux. Et seules les opérations d’entrée/sortie sont parallèles car elles sont exécutées de manière asynchrone. Un exemple de tâche intensive pour le CPU est quelque chose comme le rendu 3d, l’encodage vidéo, la modélisation scientifique, etc.
Une autre plainte à propos de Node est qu’il peut être un peu incohérent. Certains estiment que l’API ne cesse de changer à intervalles fréquents. Elle n’est parfois pas très rétrocompatible. Non seulement cela, mais la structure d’une application Express, en général, est très libre et flexible. Parfois, cela peut donner aux développeurs assez de corde pour se pendre.
Rails est très strict, il est donc plus difficile d’écrire du mauvais code. Puisque Node est asynchrone, vous allez avoir affaire à beaucoup de fonctions de callback et elles peuvent souvent bouillonner et se retrouver dans ce qu’on appelle l’enfer du callback. Il existe des solutions à cela, comme les utilitaires asynchrones et l’utilisation de promesses. Il y a plusieurs choses que vous pouvez faire pour éviter cela. Cela ne me dérange pas personnellement mais je sais que certains développeurs qui ne sont pas habitués à la programmation asynchrone ont un problème avec beaucoup de callbacks.
Comme vous pouvez le voir, ces deux options de backend ont leurs avantages et leurs inconvénients, mais ce sont toutes deux des technologies fantastiques. Tout devrait toujours être évalué au cas par cas plutôt que de simplement dire qu’un est meilleur que l’autre dans toutes les situations.