Présentation du classement TechEmpower
Présentation du classement TechEmpower sur les benchmarks des frameworks web back-end.
Bonjour et bienvenue dans ce nouvel article de la chronique réactive ! Aujourd’hui nous allons parler d’un classement assez connu dans le monde des développeurs web, bousculant parfois certaines idées reçues mais apportant un angle de réflexion très intéressant pour les développeurs de tous bords.
Il s’agit d’un classement open source référençant plusieurs centaines de technologies de serveur web, et cherchant à évaluer leurs performances de la manière la plus objective possible au travers de tests très divers.
Je parle bien entendu du classement TechEmpower !
Avant propos
Terminologie
Tout d'abord, bien que j'utilise ici le terme de "technologie de serveur web", il est en réalité beaucoup plus commun de parler de "framework" et c'est d'ailleurs le cas de TechEmpower.
Un framework désigne un ensemble d'outils et de composants logiciels destinés à définir la base et le cadre d'un programme. Cette définition est tout à fait correcte pour une grande partie des technologies de serveur web, cependant certaines de ces technologies ne se définissent pas comme tel. Certaines préfèrent le terme de librairie, module, ou même toolkit, c'est pourquoi je préfère ici le terme de "technologie" à celui de "framework".
L'importance du choix technologique
Dans cet article nous allons parler de performances, mais je tiens à rappeler avant toute chose qu'un choix technologique au sein d'un projet informatique n'est pas conditionné qu'à la simple performance.
Un choix technologique peut se faire également en fonction :
- de la communauté de développeurs, une technologie regroupant un grand nombre de développeurs sera en général beaucoup plus testée. Elle pourra également être source d'un florilège de sous projets vous permettant de gérer nouveaux formats et interopérabilité avec d'autres technologies
- de la compatibilité avec les exigences de votre projet
- de l'état de la technologie. Est elle abandonnée ? Maintenue? Pour combien de temps ?
- de la licence. Certaines technologies ont des licences payantes ou très restrictives. Ce coût et ces conditions sont donc à prendre en considération
- du langage utilisé. Certaines technologies vont impliquer par essence des limitations dont certains projets ne voudront pas. Les langages compilés comme le C, C++ ou le Rust doivent par exemple être recompilés pour chaque plateforme
- de l'expertise des développeurs du projet. Si les développeurs ne connaissent pas cette technologie cela induit naturellement un temps de formation et donc un coût
- de l'appétence des développeurs pour cette technologie. Certains développeurs refuseront de travailler avec certaines technologies pour des raisons très diverses
Il n'y aura donc pas de jugement de valeur à avoir ici, chacun étant libre de travailler avec ce qui lui plaît, et le choix d'une technologie étant quelque chose de beaucoup plus complexe que la simple sélection de l'outil le plus performant.
Le classement
Présentation
Le classement TechEmpower est un projet open source hébergé sur Github depuis 2013 (que vous pouvez retrouver ici).
Chacun est libre d'y contribuer en y ajoutant une technologie ou en améliorant le code des existantes afin que le résultat soit le plus représentatif possible.
Les tests sont présentés sous différentes catégories que vous pouvez retrouver sur cette page pour de plus amples informations, cette page liste également les règles et critères que doivent appliquer les serveurs.
Catégories
Les catégories sont les suivantes :
- Plain text : une catégorie de test où le serveur doit simplement répondre par un "Hello, world" lors de la réception d'une requête. Le but de ce test est de s'affranchir d'un maximum de facteurs limitants et d'être le plus simple possible afin d'évaluer la gestion du protocole http, du système de routing et de lecture/écriture de la technologie.
- JSON serialization : une catégorie très proche du plain text, où le serveur doit cette fois ci répondre par un objet JSON très simple : "{"message":"Hello, World!"}". Aidé des résultats du plain text, cette catégorie permet de mettre en lumière la performance de la sérialisation et désérialisation du JSON ainsi que de l’instanciation d’objet.
- Single database query : une catégorie où le serveur doit effectuer une requête à une base de données afin d’y récupérer une ligne aléatoire pour ensuite la renvoyer dans sa réponse. L'objectif est ici d'évaluer les performances d'un framework avec une base de données ciblée. Ces performances peuvent être impactées par la qualité d'implémentation du driver de base de données, par la gestion de la connection pool par le framework, et évidement par les performances brutes de la base de données.
- Multiple database queries : une variante de la catégorie Single database query où plusieurs requêtes sur la base de données sont effectuées pour chaque requête http.
- Database updates : une variante de la catégorie Multiple database queries où des modifications sont également faites sur la base de données.
- Caching : une catégorie très proche du Multiple database queries, visant à tester le système de cache du framework.
- Fortunes : une catégorie où le serveur doit effectuer une requête vers la base de données, puis se servir du résultat afin de retourner une page html.
- Composite scores : une catégorie qui ne correspond à aucun test mais à un score composite calculé à partir des résultats aux autres tests. Vous constaterez que les meilleures technologies varient d'une catégorie à une autre, cette catégorie est donc à prendre avec des pincettes dans le cadre d'un choix technologique, bien qu'elle reste un bon premier miroir sur l'état actuel des différentes technologies de serveur web
La plupart de ces catégories sont également testées à différents niveaux de concurrence (nombre de requêtes parallèles envoyées au serveur).
Les tests sont donc assez variés et offrent un très bon outil pour comprendre quelles sont les forces et les faiblesses des technologies de serveur web.
Versions multiples
Certaines technologies peuvent également apparaitre sous plusieurs versions au sein des tests, pour permettre de différencier par exemple les performances d'une technologie en fonction de la base de données utilisée. C'est le cas par exemple pour NodeJS, pour lequel vous pourrez retrouver plusieurs lignes dans les résultats détaillés sur les tests comportant des requêtes vers une base de données.

Les résultats
Maintenant que le décor est planté nous allons enfin pouvoir découvrir ce fameux classement.
Il s’agira ici de l’un des résultats les plus récents et les plus complets à l’heure où j’écris cet article, c'est-à-dire celui du 6 septembre 2023 comptabilisant 787 technologies de serveur web. Vous pouvez le retrouver par vous même à cette adresse mais si vous souhaitez en chercher un autre les résultats continus se trouvent par ici.
Voici donc le top 100 sur la catégorie Composites scores :

Où se trouvent les technologies les plus populaires
Le premier élément frappant est la très forte présence de technologies relativement peu connues dans ce classement, ce qui peut le rendre assez peu lisible lorsque l'on recherche la position des technologies auxquelles on est habitué.
Dans cette section nous allons donc filtrer ce classement pour déterminer la position des technologies les plus populaires du moment.
Pour ce faire je vais me baser sur la 2023 Developer Survey de Stack Overflow, enquête menée auprès des développeurs et listant entre autre les technologies les plus populaires à l'heure actuelle. En ce qui concerne les technologies web voici le classement par popularité (ce qui inclut également les technologies front) :

Un petit filtre sur le classement TechEmpower nous donne donc :

Ces résultats bien que choquants au premier abord peuvent nous permettre de mener plusieurs réflexions très intéressantes.
Le web moderne est très lent ?
Tout d'abord le web moderne semble très lent. En effet NodeJS, le langage le plus populaire du moment, arrive seulement 99e/787 technologies, et obtient un score global de 14.9% comparé à la meilleure technologie.
Sur une autre catégorie un peu plus objective, le Data updates (où le serveur doit effectuer plusieurs appels à la base de données ce qui est assez proche du comportement d'une API Rest), NodeJS atteint 12.8% du score de la meilleure technologie de serveur web dans cette catégorie (ntex), arrive 225e et traite en moyenne 7 fois moins de requêtes que son homologue.


Comme expliqué plus haut le choix d'une technologie ne se cantonne pas à ses performances, NodeJS dispose par exemple de nombreux atouts notamment son énorme communauté et le nombre de projets et bibliothèques gravitant autour.
Néanmoins un manque de performances induit mécaniquement une augmentation de la taille des infrastructures nécessaires pour fournir un service (besoin de davantage de machines pour gérer un même nombre de requêtes), et donc un coût plus important pour les entreprises, ainsi qu'un bilan écologique plus nocif.
C'est pourquoi il est donc à mon sens primordial pour un développeur de s'interroger sur les technologies que l'on utilise.
Y a-t-il un "meilleur langage" ?
Un autre élément très intéressant dans ce classement est également la répartition des langages de programmation. En effet bien que les deux premières technologies soient écrites en Rust, le top 10 est également composé de Javascript, Java, C et C++, avec une technologie Javascript talonnant le Rust en 3e position avec un score de 90.6% !
Nous nous trouvons donc assez loin des préjugés qui voudraient que les langages compilés comme le Rust, le C et le C++ aient de meilleures performances.
Cette homogénéité s'explique notamment par le fait que le goulot d'étranglement du web n'est pas dans la vitesse du langage mais dans le réseau ainsi que dans la gestion du multi-threading.
Ces résultats soulèvent à mon sens un point primordial : le langage de programmation importe en réalité assez peu dans les performances, on voit ici un langage interprété, le Javascript, avoir de meilleures performances que des langages compilés, ici le C et le C++. Le design étant en réalité l'élément le plus important.
Conclusion
Dans cet article nous avons découvert le classement TechEmpower, un très bon outil pour comparer les différentes technologies de serveur web. Cet outil aide aussi bien dans la veille technologique et dans la découverte de nouvelles technologies que dans le choix technologique dans le cadre d'un projet professionnel.
Cet outil est très complet et regroupe un très grand nombre d'informations permettant également l'identification de goulots d'étranglements.
L'analyse des résultats de ce classement nous a également permis de déduire plusieurs points importants :
- les technologies les plus populaires ne sont pas nécessairement les plus rapides, même si elles en ont la réputation
- le web moderne est en réalité assez lent
- il n'y a pas de langage ou de technologie "ultime" ou supérieur
- le design d'un logiciel prime sur le langage utilisé
Nous avons également rappelé qu'un choix technologique n'est pas conditionné qu'à la simple performance, pour ma part je vous encourage quelque soit votre langage et vos technologies de prédilection à toujours continuer de réfléchir sur comment développer des logiciels de meilleure qualité, plus résilients, plus performants, et en somme plus réactifs.
J'espère que cet article vous aura plu, n'hésitez pas aller tester et jouer avec cet outil par vous même, il s'agit d'une véritable mine d'or à mon sens. Je suis également ouvert à tout commentaire et critique constructive alors n'hésitez pas ;)
Merci pour votre attention et à bientôt !
Références
- Le classement TechEmpower : https://www.techempower.com/benchmarks
- Le Github du classement : https://github.com/TechEmpower/FrameworkBenchmarks
- Le détail sur les tests du classement : https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview
- Les benchmarks continus : https://tfb-status.techempower.com
- La visualisation du classement utilisé dans cet article : https://www.techempower.com/benchmarks/#section=test&runid=68d3dc8f-bcea-4bb2-8e7b-9c1934debaee
- Les détails du classement utilisé dans cet article : https://tfb-status.techempower.com/results/68d3dc8f-bcea-4bb2-8e7b-9c1934debaee
- Le 2023 developer survey de Stack Overflow : https://survey.stackoverflow.co/2023