Node.js et benchmarks foireux

Deadpool says hello

Comme précisé sur la page où je présente rapidement mes projets, je suis co-fondateur d'une communauté axée sur le standard ECMAScript. Récemment, quelqu'un a envoyé le lien d'un article anglophone qui tentait de démontrer, benchmarks à l'appui, que PHP était plus performant que Node.js. Cependant, pour un développeur ayant un minimum de bon sens, quand un article prétend cela, ça sent pas bon. Du coup j'ai décidé de prendre cet article, et de démonter un à un ces mensonges (n'ayons pas peur de dire ce qui est).

Prenons un à un les arguments présentés par l'article.

Les bénéfices de PHP...

Info N°1 : Fausse

Il est plus aisé de configurer son environnement de développement pour PHP

Non. Basiquement, non. Si vous voulez commencez à faire quelque chose en PHP, vous allez devoir installer LAMP ou équivalent, qui vous installe tout une stack de bordel juste pour pondre un Hello World.
Pour commencer à utiliser Node.js, vous téléchargez et exécutez un installeur qui vous pose un exécutable et deux variables d'environnement à tout casser.

Info N°2 : Fausse

Node.js requiert plus de code

Ca dépend du cas d'utilisation ! La première chose à prendre en compte, c'est que Node.js et PHP ne peuvent pas remplir les mêmes fonctions. En effet, Node.js peut couvrir tous les cas de développement connus, alors que PHP ne sert assez basiquement que dans le domaine du développement web.
Oui, si vous voulez afficher Hello world sur une page web, PHP vous demandera d'écrire moins de code. Et ce pour une raison très simple : PHP a besoin d'un autre composant pour réaliser le routing et et le serving (Apache, Nginx, etc.) là où en Node.js, vous devez vous-même écrire ces éléments.

Info N°3 : Fausse

Pour pouvoir développer en Node.js, vous devez comprendre les notions de fonctions "callback" et de blocage

Et pour faire du PHP vous devez vous assurer de ne pas oublier les points-virgules. BOUHOUHOUUUUUUUU des joues coulent sur mes larmes.
Oui, comme dans tous les langages, ceux-ci ont des spécificités, il faut les apprendre, vous n'y échapperez pas plus en apprenant PHP qu'en apprenant Node.js.

Info N°4 : Impertinente

Tous les services d'hébergement internet supportent PHP

Oui. Enfin non. Joker. Si vous hébergez quelque chose, en principe vous ne l'hébergez pas chez 150 hébergeurs différents. Donc on s'en fiche que tous les hébergeurs supportent PHP, il nous en faut juste un. Bah c'est pareil pour Node.js.

Info N°5 : Impertinente

Supporte plus de frameworks et de CMS

Concernant les CMS, il est vrai que les CMS majoritairements utilisés sont développés en PHP. Il en existe cependant qui sont écrits en Node.js. Par conséquent je ne vois pas trop ce que viens faire cet argument.

Info N°6 : Impertinente

PHP possède des recommandations officielles concernant le style de code à adopter

Cet argument est impertinent puisque pour beaucoup, c'est un confort de pouvoir choisir de ne pas mettre de points-virgules, ou d'en mettre. Concrètement, tant que votre code JavaScript est conforme au standard ECMAScript, c'est valide pour Node.js.

Info N°7 : Impertinente

PHP a une plus grande liste d'instructions et une plus grande FAQ

Admettons, et ça démontre quoi ? Qu'il faut plus d'instructions pour pouvoir développer en PHP et qu'il y a plus de questions en PHP ?

Info N°8 : Impertinente

La communauté de développeurs PHP est un groupe de personnes énorme et diversifié, ils revoient et mettent à jour constamment les bibliothèses, frameworks et autres composants PHP

Comme pour Node.js... Au suivant !

Info N°9 : Vraie

Utilisez PHP si vous utilisez des technologies CMS comme WordPress, Drupal, Joomla, etc.

Oui. La première vraie info de l'article enfonce une porte ouverte. Y avait-t-il réellement besoin d'affirmer que pour utiliser des CMS développés en PHP, il fallait PHP ?

Info N°10 : Fausse

Utilisez PHP si vous utilisez une base de donnée relationnelle

Pourquoi ? Non parce que concrètement, vous pouvez tout autant utiliser Node.js pour vous amusez ou pour mettre en production des applications qui utilisent des bases de données relationnelles. Je dirais même plus : en utilisant Node.js vous conserverez une connexion ouverte à votre base de donnée et vous ne la ré-engagerez pas à chaque requête comme on est forcé de le faire en PHP.

Les bénéfices de Node.js...

Info N°1 : Vraie

Node.js intègre la prise en charge du serveur [HTTP]

Oui.

Info N°2 : Vraie

Une syntaxe unique pour le client et le serveur, améliorant la réutilisabilitez du code et facilite le travail du développeur full stack

Oui. Je dirais même plus : UN LANGAGE POUR LES GOUVERNER TOUS, UN LANGAGE POUR LES TROUVER, UN LANGAGE POUR LES AMENER TOUS ET DANS LES TENEBRES LES LIER.

Info N°3 : Vraie

Les modules sont téléchargés et initialisez quand ils sont appelés pour la première fois, après cela, il sont constamment disponibles

Oui. Je dirais même plus. Une des grandes forces de Node.js, c'est que les parties du code appelés fréquemments sont repérées par le moteur d'exécution et un genre de processus de mise en cache est effectué pour accélérer ensuite l'exécution de ces parties de code.

Info N°4 : Vraie

Le module stream rend plus simple le traitement de gros fichiers

Euh... oui ?..

Info N°5 : Fausse

Node.js possède une syntaxe presque identique à JavaScript

HEIN ? MAIS NODE.JS EXECUTE DU JAVASCRIPT ANDOUILLE, CE N'EST PAS PRESQUE LA MEME SYNTAXE, C'EST LE MÊME LANGAGE.
Pardon, je crois que je me suis emporté. Pour être précis et concis : Node.js interprète JavaScript tout en fournissant les bibliothèques de base pour intéragir avec l'OS (réseau, fichiers, etc.)

Les résultats du benchmark

Oui ! PHP est plus efficient quand il s'agit d'effectuer un grand nombre de fois des actions simples. Cela dit, quand Node.js traite une requête HTTP, il ne fait pas attendre toutes celles qui arrive le temps qu'il ait terminé la première : voilà donc la puissance de l'asynchrone.
Oui, dans certains cas PHP est plus rapide. Mais quand on compare le temps de chargement d'un blog sous WordPress ou de le blog sur lequel vous lisez ces lignes, on se rend compte que manifestement, l'affirmation n'est pas valide dans tous les cas.

Le benchmark qui compare la capacité des deux technos à tenir une montée en charge est biaisée : PHP se cache derrière un serveur Nginx. Hors comme le dit l'auteur de l'article, ce n'est pas vraiment le code qui est important, mais la configuration des serveurs. Hors, on ne nous donne pas les configurations et pourtant ça serait important de savoir si le cache est activé sur Fast-CGI...

Quoi qu'il en soit, si les débats font rage entre les frameworks PHP Laravel et Symfony pour savoir qui surpasse l'autre entre 202 et 224 requêtes par seconde, AdonisJS, framework Node.js, roule à 28'000 requêtes par secondes sans tortiller du cul.

Mais dans la finalité des choses, peut-on réellement juger deux technologies qui ne sont pas du tout prévues pour répondre aux mêmes besoins sur des tests si basiques ?

Si PHP est si performant que cela, pourquoi est-ce Node.js qui met à jour les Tesla, qui est utilisé sur les écrans de contrôle de la NASA, qui fait tourner Netflix ?
Oui, Node.js met plus de temps à concaténer 1'000'000 de fois une chaîne de caractère. Mais quand on parle d'asynchrone, de non bloquant, de légèreté, de haute-disponibilité, on ne parle pas de PHP, on parle de Node.js

Spongebob see ya

Xavier Stouder

Read more posts by this author.