Node.js vs PHP: une bataille épique pour le partage d'esprit des développeurs

C'est un complot hollywoodien classique: la bataille entre deux vieux amis qui se sont séparés. Souvent, la friction commence lorsqu'un ami suscite un intérêt pour ce qui avait toujours été le domaine tacite de l'autre ami. Dans la version en langage de programmation de ce film, c'est l'introduction de Node.js qui transforme le copain en un match de rancune: PHP et JavaScript, deux partenaires qui ont jadis régné sur Internet ensemble, mais qui le tentent maintenant pour la part d'esprit des développeurs.

Autrefois, le partenariat était simple. JavaScript a traité de petits détails sur le navigateur, tandis que PHP gérait toutes les tâches côté serveur entre le port 80 et MySQL. C'était un syndicat heureux qui continue de soutenir de nombreuses parties cruciales d'Internet. Entre WordPress, Drupal et Facebook, les gens peuvent difficilement passer une minute sur le Web sans se heurter à PHP.

Puis un gamin intelligent a découvert qu'il pouvait faire fonctionner JavaScript sur le serveur. Du coup, il n'était plus nécessaire d'utiliser PHP pour créer la prochaine génération de piles de serveurs. Un seul langage était tout ce qu'il fallait pour construire Node.js et les frameworks exécutés sur le client. «JavaScript partout» est devenu le mantra pour certains.

Depuis cette découverte, JavaScript a explosé. Les développeurs Node.js peuvent désormais choisir entre une collection en constante expansion d'excellents frameworks et échafaudages: React, Vue, Express, Angular, Meteor, etc. La liste est longue et le plus gros problème est de choisir entre d'excellentes options.

Certains considèrent le boom de Node.js comme la preuve que JavaScript est définitivement gagnant, et il existe de nombreuses données brutes pour renforcer cette vision. GitHub rapporte que JavaScript est le langage le plus populaire de sa collection de référentiels, et le cousin embrassant de JavaScript, TypeScript, se développe également rapidement. Beaucoup des projets les plus cool sont écrits en JavaScript et de nombreux hashtags les plus populaires y font référence. PHP, entre-temps, a glissé de la troisième place à la quatrième dans ce classement et il a probablement glissé encore plus dans le nombre de communiqués de presse, de déploiements de produits et d'autres moments fortement commercialisés.

Mais le battage médiatique s'estompe et les logiciels peuvent durer des décennies. La plupart de la base de code PHP ne va pas migrer et continue de servir de grandes parties du texte que nous lisons chaque jour. Selon certaines estimations, 40% des pages que nous consultons commencent, sous une forme ou une autre, avec PHP. Cela tient en partie au fait que PHP continue de renaître. Ces dernières années, les tripes des systèmes exécutant PHP ont été complètement réécrites. Ce n'est pas le même code PHP qui a exécuté le site Web de vos grands-parents.

Le compilateur zippy et juste-à-temps de PHP fournit des réponses plus rapidement que jamais grâce aux mêmes techniques intelligentes qui ont alimenté la révolution Node.js. Désormais, PHP 7.2 et HHVM offrent plusieurs des mêmes optimisations intelligentes à la volée que V8 a apportées à Chrome et Node.js. Non seulement cela, mais HHVM a Hack, un dialecte PHP intelligent qui offre une prise en charge complète des fonctionnalités de programmation sophistiquées telles que les lambdas, les génériques et les collections. Donc, si vous avez besoin de ces fonctionnalités, vous n'avez pas besoin de rechercher une pile plus complète.

Bien sûr, la fin n'est pas encore écrite. Pour chaque codeur qui vante la pureté et la jeunesse de Node.js et la simplicité de JavaScript partout, il y en a un autre qui est satisfait de la base de code profond et de la stabilité depuis longtemps comprise de PHP. L'ancien codger va-t-il repousser le parvenu côté serveur? JavaScript renversera-t-il son vieil ami pour atteindre la domination mondiale? Mettez un autre lot de pop-corn au micro-ondes et asseyez-vous.

Là où PHP gagne: mélanger le code avec le contenu

Vous écrivez, versez des pensées dans le texte de votre site Web et vous souhaitez ajouter une branche au processus, une petite déclaration si-alors pour le rendre joli, par exemple, en fonction d'un paramètre de l'URL. Ou peut-être souhaitez-vous mélanger du texte ou des données d'une base de données. Avec PHP, vous ouvrez les balises PHP magiques et commencez à écrire du code en quelques secondes. Pas besoin de modèles - tout est un modèle! Pas besoin de fichiers supplémentaires ou d'architectures élaborées, seule une puissance logistique programmable à portée de main.

Où Node gagne: séparer les préoccupations

Mélanger le code avec le contenu est une béquille qui peut finir par vous paralyser. Bien sûr, c'est amusant de mélanger du code avec du HTML les deux ou trois premières fois que vous le faites. Mais bientôt votre base de code devient un désordre de logique enchevêtré. Les vrais programmeurs ajoutent de la structure et séparent la couche cosmétique de la couche logique. C'est plus simple à comprendre pour les nouveaux programmeurs et plus facile à entretenir. Les frameworks exécutés sur Node.js sont construits par des programmeurs qui savent que la vie est meilleure lorsque le modèle, la vue et le contrôleur sont séparés.

Où PHP gagne: la base de code profond

Le Web est rempli de code PHP. Les plateformes les plus populaires pour la création de sites Web (WordPress, Drupal, Joomla) sont écrites en PHP. Non seulement les plates-formes sont open source, mais la plupart de leurs plugins le sont aussi. Il y a du code PHP partout, et il attend que vous puissiez le télécharger, le modifier et l'utiliser selon vos besoins.

Là où Node gagne: des fonctionnalités plus modernes

Bien sûr, il existe des milliers d'excellents fichiers PHP open source, mais certains sont des plug-ins WordPress vieux de 12 ans qui espèrent et prient pour que quelqu'un les télécharge. Pour chaque version moderne de Symfony, il existe une bibliothèque poussiéreuse et oubliée depuis longtemps que personne ne met à jour.

Qui veut passer des heures, des jours ou des semaines à jouer avec du code qui n'a pas été mis à jour depuis des années? Les plug-ins Node.js ne sont pas seulement plus récents, ils ont été construits avec une parfaite connaissance des dernières approches architecturales. Ils ont été construits par des programmeurs qui comprennent que les applications Web modernes doivent transmettre la plupart des renseignements au client.

Et bien que JavaScript ait de nombreuses petites particularités qui rendent certains fous, il s'agit pour la plupart d'un langage moderne qui arbore une syntaxe moderne et quelques fonctionnalités utiles comme les fermetures. Vous pouvez le reconfigurer et l'étendre facilement, ce qui rend possible de puissantes bibliothèques telles que jQuery. Vous pouvez transmettre des fonctions comme des objets. Pourquoi vous limiter?

Là où PHP gagne: la simplicité (en quelque sorte)

Il n'y a pas grand chose à PHP: quelques variables et fonctions de base pour jongler avec les chaînes et les nombres. C'est une couche mince qui ne fait pas grand chose à part déplacer les données du port 80 vers la base de données et inversement. C'est ce qu'il est censé faire. Une base de données moderne est un outil magique, et il est logique de lui laisser le gros du travail. PHP est la bonne quantité de complexité pour un travail qui n'est pas censé être complexe.

Là encore, si vous êtes un programmeur qui souhaite faire plus qu'interagir avec une base de données et formater les résultats, vous pouvez désormais faire plus avec PHP sans vous retenir. Le HHVM de Facebook prend en charge Hack, un langage complet rempli de fonctionnalités modernes telles que les annotations de type, les génériques et les expressions lambda. Utiliser cela limite votre code à s'exécuter uniquement sur le HHVM, mais ce n'est pas la pire chose au monde. C'est très rapide.

Là où Node gagne: des dizaines d'options linguistiques

Si les utilisateurs PHP sont heureux d'avoir accès à Hack, ils devraient envisager de passer au monde de Node.js car de nombreux langages principaux peuvent être compilés de manière croisée pour s'exécuter en JavaScript. Il existe des options bien connues comme Java, C # ou Lisp et des dizaines d'autres comme Scala, OCaml et Haskell. Il existe même des cadeaux pour les amateurs nostalgiques de BASIC ou Pascal. Cette liste de langages compilés en JavaScript à partir de Jeremy Ashkenas est assez complète. De plus, des cousins ​​JavaScript comme TypeScript et CoffeeScript proposent des approches légèrement différentes et améliorées du même jeu.

Là où PHP gagne: aucune application client n'est nécessaire

Tout le discours sur l'utilisation de la même langue dans le navigateur et sur le serveur est bien, mais que faire si vous n'avez besoin d'utiliser aucune langue sur le navigateur? Et si vous expédiez les données sous forme HTML? Et si vous construisez un site Web spartiate et statique pour fournir strictement ce qui est nécessaire sans le bling interactif? Le navigateur le fait apparaître, et il n'y a pas de maux de tête ou de problèmes causés par des threads JavaScript qui tentent de créer une page sur le navigateur à partir de deux douzaines d'appels de service Web. Le HTML pur fonctionne plus souvent que toute autre chose, et PHP est optimisé pour créer cela. Pourquoi s'embêter avec JavaScript sur le navigateur? Construisez tout sur le serveur et évitez de surcharger ce petit navigateur sur le petit téléphone.

Où Node gagne: les appels de service sont plus fins que les appels PHP HTML

Alors que les applications Web HTML5 folles d'AJAX peuvent avoir trop de pièces mobiles, elles sont cool et très efficaces. Une fois que le code JavaScript est dans le cache du navigateur, la seule chose qui se déplace le long des fils est les nouvelles données. Il n'y a pas une tonne de balisage HTML, et il n'y a pas de voyages répétés pour télécharger la page entière. Seules les données ont changé. Si vous êtes prêt à prendre le temps de créer une application Web astucieuse côté navigateur, il y a un gros gain. Node.js est optimisé pour fournir les données et uniquement les données via des services Web. Si votre application est complexe et riche en données, c'est une bonne base pour une diffusion efficace.

Là où PHP gagne: SQL

PHP a été conçu pour coexister avec MySQL et ses nombreuses variantes, comme MariaDB. Si MySQL n'est pas tout à fait correct, il existe d'autres excellentes bases de données SQL d'Oracle et de Microsoft. Votre code peut basculer avec quelques modifications de vos requêtes. Le vaste monde SQL ne s'arrête pas à ses frontières. Certains des codes les plus stables et les mieux développés s'interfaceront avec une base de données SQL, ce qui signifie que toute cette puissance peut également être facilement intégrée dans un projet PHP. Ce n'est peut-être pas une famille parfaite et heureuse, mais c'est une grande famille. Non seulement cela, mais le monde des bases de données s'améliore lentement à mesure que les développeurs trouvent des moyens d'ajouter plus d'intelligence à la base de données afin que vous n'ayez pas besoin de travailler aussi dur.

Où Node.js gagne: JSON

Si vous devez avoir accès à SQL, Node.js a des bibliothèques pour le faire. Mais Node.js parle également JSON, la lingua franca pour interagir avec la plupart des dernières bases de données NoSQL. Cela ne veut pas dire que vous ne pouvez pas obtenir de bibliothèques JSON pour votre pile PHP, mais il y a quelque chose de fluide dans la simplicité de travailler avec JSON lors de l'utilisation de JavaScript. C'est une syntaxe du navigateur au serveur Web en passant par la base de données. Les deux points et les accolades fonctionnent de la même manière partout. Cela seul vous évitera des heures de frustration.

Là où PHP gagne: la vitesse de codage

Pour la plupart des développeurs, écrire PHP pour les applications Web est plus rapide: pas de compilateurs, pas de déploiement, pas de fichiers JAR ou de préprocesseurs - simplement votre éditeur préféré et quelques fichiers PHP dans un répertoire. Votre kilométrage variera, mais lorsqu'il s'agit de créer rapidement un projet, PHP est un bon outil à utiliser.

Là où Node.js gagne: la vitesse de l'application

L'écriture de code JavaScript est un peu plus difficile lorsque vous comptez les accolades et les parenthèses, mais lorsque c'est fait, votre code Node.js peut voler. Le mécanisme de rappel est génial car il vous évite de jongler avec les fils. Le noyau est bien construit et conçu pour faire tout cela pour vous. N'est-ce pas ce que tout le monde veut?

Là où PHP gagne: la concurrence

La bataille pour le cœur et l'esprit des développeurs PHP est toujours en cours. L'équipe HHVM et l'équipe Zend travaillent dur pour fournir un code rapide pour tout le monde. Des benchmarks indépendants apparaissent et tout le monde pousse les bases de code à la limite. Cela signifie seulement de meilleures performances.

Là où Node.js gagne: Solidarité

Voulez-vous vraiment deux bases de code différentes? Bien sûr, la concurrence aide, mais la fragmentation suit bientôt. Que se passe-t-il lorsque votre code ne s'exécute que sur l'un des deux? La concurrence ne sert à rien si vous devez passer des semaines ou des mois à réécrire votre code. Alors que Node.js a connu sa propre scission il y a quelques années, avec le lancement d'io.js, l'univers Node.js s'est depuis réuni, lui donnant le genre de solidarité linguistique que les développeurs PHP pourraient bientôt aspirer.

Là où PHP gagne: les applications de base

Au cours des dernières années, quelques développeurs ont lancé des applications Web et se sont trouvés frustrés par le comportement lent. Le JavaScript qui pilote toutes ces pièces mobiles peut être des dizaines de milliers d'octets, parfois des centaines de milliers. Lorsque tous les paquets arrivent, ils doivent être analysés, compilés et finalement exécutés - le tout pour fournir quelques octets comme la température et les prévisions.

La réaction contre cette folie rococco peut être trouvée dans les équipes qui construisent des générateurs de sites statiques (463 à ce jour) et des pages Web dépouillées au format AMP. PHP est un choix naturel pour toute équipe qui souhaite concentrer l'intelligence sur le serveur afin que le client ne soit pas surchargé.

Là où Node.js gagne: la richesse

Ludwig Mies van der Rohe, l'architecte des bâtiments, a dit un jour: «Moins c'est plus». Robert Venturi, un autre architecte, est venu et a rétorqué: «Moins est ennuyeux. Les smartphones ont plus de puissance qu'une pièce remplie d'ordinateurs Cray. Les ordinateurs de bureau ont des cartes vidéo avec plusieurs ventilateurs pour les garder au frais pendant tout le traitement. Pourquoi devrions-nous dépouiller notre code et vivre comme une victime de l'époque de la dépression dans un roman de Steinbeck? Profitez au maximum. Les grands sites Web lisses remplis de code JavaScript sont accrocheurs, spectaculaires et surtout amusants. Bien sûr, c'est un peu obscène de gaspiller autant de bande passante sur quelques bits de données, mais la bande passante n'a jamais été moins chère. Vis un peu!

Où les deux gagnent: sans tête

Le mot «headless» fait référence au code PHP exécuté sur le serveur. Récemment, certaines des meilleures applications PHP comme Drupal ont regardé de l'autre côté de l'allée et sont émerveillées par les interfaces utilisateur sophistiquées construites par les frameworks JavaScript tels que React, Angular ou Vue. Au lieu d'essayer de rivaliser avec eux, ils cèdent le contrôle du client et se concentrent sur le bon travail avec le back-end sur le serveur.

Si vous avez beaucoup investi dans du code PHP exécuté sur le serveur, cela peut être un moyen de profiter du meilleur des deux approches. L'ancien code PHP établi agit comme une porte d'entrée vers la base de données, revérifiant les requêtes, nettoyant les données et fournissant généralement toute la logique métier. Le côté client est une application Web progressive écrite avec le dernier framework JavaScript. Lorsqu'il a besoin d'informations, il envoie une requête AJAX au code PHP.

Cela n'a peut-être pas de sens pour quelqu'un qui part de zéro, mais si vous avez compté sur PHP pendant des années et que vous voulez avancer progressivement, cela peut être un heureux compromis.

Là où les deux gagnent: microservices et sans serveur

Les paradigmes montants des microservices ou sans serveur offrent un moyen pour le code JavaScript et PHP de cohabiter sur le serveur et de s'entendre. Les deux solutions divisent le travail en des dizaines de services ou fonctions plus petits et ceux-ci peuvent fonctionner indépendamment et rester dans leurs couloirs. Certaines parties, généralement les sections les plus anciennes et les plus stables de l'application, peuvent exécuter PHP. Les autres parties, souvent les plus récentes, seront écrites dans Node.js. La langue de POSTou GETpeut être la lingua franca qui les unit tous.