Le web connaît une ère de développement rapide. Les développeurs côté serveur sont très perplexes lorsqu'ils choisissent un langage. Il y a des langages qui dominent depuis longtemps, comme C, Java et Perl, et des langages axés sur le développement web, comme Ruby, Clojure et Go. Tant que votre projet fonctionne bien, votre choix ne semble pas si important.

Mais comment ces nouveaux développeurs web peuvent-ils faire le bon choix ?
Je ne veux pas déclencher une guerre entre les camps PHP et Node.js. Je vais comparer l'état de développement de ces deux langages dans leurs domaines respectifs :
- PHP
Rasmus Lerdorf a créé PHP en 1994. Il est exécuté par des composants installés sur des serveurs web (Apache, Nginx). Le code PHP peut être mélangé avec du HTML. Les débutants peuvent rapidement écrire du code utile sans beaucoup de pratique. Cela a rendu PHP de plus en plus populaire ; aujourd'hui, PHP tourne sur 80% des serveurs dans le monde. WordPress, un système de gestion de contenu utilisé par un quart des sites web mondiaux, est écrit en PHP. - Node.js
Ryan Dahl a créé Node.js en 2009. Il est basé sur le moteur JavaScript V8 de Google (qui exécute le code JavaScript côté client dans le navigateur Chrome). Contrairement à d'autres langages, Node.js dispose de bibliothèques intégrées pour gérer les requêtes et réponses réseau, donc vous n'avez pas besoin d'un serveur séparé (Apache, Nginx) ni d'autres dépendances. Bien que Node.js soit très récent, il a rapidement gagné une grande popularité. Il est utilisé dans de nombreuses grandes entreprises, telles que Microsoft, Yahoo, LinkedIn et PayPal.
Qu'en est-il de nos chers C#, Java, Ruby, Python, Perl, Erlang, C++, Go, Dart, Scala, Haskell, et ainsi de suite ?
Si l'article comparait les différents paramètres de tous les langages ci-dessus, il serait très long. Le liriez-vous encore ? Vous attendez-vous à ce qu'un programmeur connaisse tous les langages de programmation ? C'est évidemment impossible. J'ai principalement comparé PHP et Node.js, pour les principales raisons suivantes :
- Premièrement, ils méritent d'être comparés. Tous deux sont open source, tous deux sont dédiés au développement web, et tous deux peuvent être utilisés pour des projets similaires.
- PHP existe depuis longtemps, mais Node.js est tout juste en train d'émerger et reçoit de plus en plus d'attention. Les programmeurs PHP devraient-ils croire au battage médiatique autour de Node.js ? Devraient-ils envisager de changer de langage ?
- Je comprends et j'adore les langages de programmation. J'utilise PHP et JavaScript depuis les années 1990, et j'ai aussi plusieurs années d'expérience avec Node.js. À part cela, je me suis essayé à d'autres technologies, mais je ne peux pas encore en faire une évaluation objective ici.
De plus, peu importe combien de langages sont comparés, car il y aura toujours quelqu'un quelque part pour se plaindre que je n'ai pas mentionné son langage.
La bataille sur SitePoint
Les programmeurs passent beaucoup de temps à améliorer leurs compétences en programmation. Certaines personnes ont des compétences transférables d'un langage de programmation à un autre, mais ceux qui atteignent un niveau supérieur font leurs propres choix en fonction de nombreux facteurs. À un niveau subjectif, vous allez promouvoir et défendre vos décisions techniques.
SitePoint Smackdowns n'adopte pas l'approche « choisissez ce qui vous convient, mon ami ». Je ferai des recommandations basées sur l'expérience personnelle, les exigences et les préférences. Vous n'êtes peut-être pas d'accord avec tout ce que je dis, et cela n'a pas d'importance ; ce qui compte, c'est que vos opinions aideront les autres à faire des choix plus éclairés.
Méthode d'évaluation
Ci-dessous, PHP et Node.js seront comparés sur dix manches. Chaque manche examinera des défis de développement courants qui peuvent être appliqués à n'importe quelle technologie web. Nous n'entrerons pas trop dans les détails ; peu de gens se soucient de la valeur des générateurs de nombres aléatoires ou du tri de tableaux.
Celui qui remportera le plus de manches sera le vainqueur. Prêt ? Que la bataille commence...
Première manche : Premiers pas
À quelle vitesse pouvez-vous créer une page web "Hello World" ? En PHP :
<?php
echo 'Hello World!';
?>
Ce code peut être placé dans n'importe quel fichier pouvant être analysé par le moteur PHP – généralement un fichier avec une extension .php. Il suffit de saisir l'URL dans votre navigateur pour accéder au fichier.
Certes, ce n'est pas tout. Ce code ne peut s'exécuter que sur un serveur web avec PHP installé (PHP dispose d'un serveur intégré, mais il est encore préférable d'en utiliser un plus robuste). La plupart des systèmes d'exploitation fournissent un logiciel serveur, comme IIS sur Windows, Apache sur Mac et Linux, bien qu'ils nécessitent un démarrage et une configuration. Des installateurs préconstruits tels que XAMPP ou des images de machine virtuelle (comme Vagrant) sont souvent utilisés. Une méthode plus simple : téléversez vos fichiers vers n'importe quel hébergeur web.
En revanche, installer Node.js est un jeu d'enfant. Vous pouveztélécharger l'installateurouutiliser un gestionnaire de paquets. Ensuite, créons une page web dans hello.js :
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
}).listen(3000, '127.0.0.1');
Avant de visiter http://127.0.0.1:3000/ dans votre navigateur, vous devez saisir node hello.js dans le terminal pour démarrer l'application. Avec les cinq lignes de code ci-dessus, nous avons créé un petit serveur web. Bien que cela soit surprenant, c'est difficile à comprendre même pour les personnes ayant une solide expérience en JavaScript côté client.
PHP remporte cette manche car il est conceptuellement plus simple. Quelqu'un ayant une petite connaissance des instructions PHP peut développer quelque chose d'utile. PHP a plus de dépendances logicielles, mais les concepts de PHP sont moins encombrants pour les débutants.
Connaître un peu JavaScript et développer des applications Node.js sont deux choses différentes. Les méthodes de développement Node.js diffèrent de la plupart des technologies côté serveur. Vous devez d'abord comprendre certains concepts assez complexes, tels que les fermetures et les fonctions de rappel.
Deuxième manche : Aide et assistance
Sans l'aide de la documentation officielle et des ressources (cours, forums, Stack Overflow), vous rencontrerez inévitablement des difficultés. PHP remporte facilement cette manche ; il dispose d'une multitude de guides et de vingt ans de questions-réponses. Peu importe ce que vous voulez faire, quelqu'un a déjà été confronté au même problème avant vous.
Node.js dispose d'une bonne documentation, mais il est plus jeune et offre moins d'aide que PHP. JavaScript est sur le marché depuis aussi longtemps que PHP, mais la plupart de l'aide concerne le développement pour navigateur, ce qui n'est essentiellement pas utile ici.
Troisième manche : Syntaxe du langage
Les déclarations et la structure sont-elles logiques et faciles à utiliser ?
Contrairement à certains langages et frameworks, PHP ne vous impose pas une manière spécifique d'écrire ; c'est à vous de décider. Vous pouvez commencer par quelques lignes de code, puis ajouter quelques méthodes, puis écrire de simples objets de style PHP4, et enfin construire d'élégantes applications PHP5+ orientées objet et suivant le modèle MVC. Votre code peut être désordonné au début, mais il fonctionne, et il s'améliorera à mesure que vous comprendrez plus profondément.
La syntaxe de PHP peut être légèrement ajustée entre les versions, mais la rétrocompatibilité est généralement bien gérée. Malheureusement, cela conduit aussi à un problème : PHP est désordonné. Par exemple, comment compter le nombre de caractères dans une chaîne ? Est-ce count ? str_len ? Ou strlen ? Ou mb_strlen ? PHP possède des centaines de fonctions, et les conventions de nommage ne sont pas totalement cohérentes. Essayez d'écrire quelques lignes de code sans consulter la documentation.
JavaScript est relativement plus simple, avec seulement quelques dizaines d'instructions de base. Cependant, sa syntaxe est souvent critiquée par les développeurs parce que son modèle objet prototypal semble accessible mais ne l'est pas réellement. De plus, diverses erreurs mathématiques (0.1 + 0.2 != 0.3) et des coercitions de type désordonnées ('4' + 2 == '42' et '4' - 2 == 2) ont suscité de nombreuses plaintes, mais ces situations causent rarement des problèmes ; la plupart des langages ont de telles excuses.
PHP a ses avantages, mais pour cette manche, je déclare Node.js vainqueur. Les raisons sont les suivantes :
- JavaScript est le langage le plus difficile au monde à comprendre — mais un jour, lorsque vous aurez une révélation et que les concepts feront tilt, vous trouverez que les autres langages sont trop maladroits.
- Le code JavaScript est plus concis que celui en PHP. Par exemple, vous n'avez plus besoin de convertir dans les deux sens avec JSON — ni avec UTF-8.
- Les développeurs full-stack peuvent utiliser JavaScript à la fois côté client et côté serveur. Le cerveau n'a pas besoin de passer constamment de l'un à l'autre.
- Une compréhension approfondie de JavaScript donne envie de l'utiliser davantage, mais ce n'est pas le cas avec PHP.
Quatrième manche : outils de développement
Les deux technologies disposent d'excellents éditeurs, environnements de développement intégrés, débogueurs, validateurs et autres outils. Je pense qu'il y a match nul, mais certains outils donnent à Node.js un léger avantage : NPM - gestionnaire de paquets. NPM vous permet d'installer et de gérer des dépendances, de définir des variables de configuration, de définir des scripts, etc.
Le projet Composer de PHP a été inspiré par NPM et est plus fort sur certains aspects. Cependant, PHP ne le fournit pas par défaut, sa bibliothèque active est plus petite, et son impact sur la communauté est plus faible.
NPM mérite aussi une part de crédit pour la croissance d'outils de build comme Grunt et Gulp qui ont révolutionné les méthodes de développement. Parfois, les développeurs PHP peuvent vouloir/avoir besoin d'installer Node.js ; ce n'est pas un recul.
Cinquième round : Environnement
Où la technologie peut-elle être utilisée et déployée ? Quelles plateformes et quels écosystèmes sont pris en charge ? Les développeurs web doivent souvent développer des applications qui ne sont pas entièrement orientées web, comme des outils de build, des outils de migration, des scripts de conversion de base de données, etc.
PHP dispose de moyens pour développer des applications de bureau et des outils en ligne de commande, mais vous ne les utiliseriez pas. Par essence, PHP est une technologie côté serveur ; elle excelle dans ce domaine mais s'étend rarement au-delà.
Il y a plusieurs années, JavaScript était considéré comme très restrictif, avec quelques technologies périphériques, mais son principal champ de bataille était le navigateur. Node.js a changé cette perception et provoqué une explosion des projets JavaScript. Vous pouvez utiliser JavaScript partout : navigateur, serveur, terminal, bureau, même systèmes embarqués, ce qui rend JavaScript omniprésent.
Sixième round : Intégration
Les technologies de développement sont très limitées à moins qu'elles ne puissent s'intégrer à des bases de données et des pilotes. PHP est solide dans ce domaine. PHP existe depuis de nombreuses années, et ses extensions lui permettent de communiquer directement avec des serveurs qui possèdent des API courantes ou obscures.
Node.js rattrape rapidement son retard, mais vous pourriez avoir mal à la tête pour trouver des composants d'intégration matures pour certaines technologies anciennes et obscures.
Septième round : Hébergement et déploiement
Est-il facile de déployer votre toute nouvelle application sur un serveur web en ligne ? C'est une nouvelle victoire totale pour PHP. Contactez n'importe quelle société d'hébergement web au hasard et vous trouverez un large support de PHP, peut-être avec MySQL inclus gratuitement. Pour les bacs à sable, PHP est considéré comme plus simple, et les extensions risquées peuvent être désactivées.
Node.js est une tout autre bête ; les applications côté serveur tournent en permanence. Vous avez besoin d'un environnement serveur physique/virtuel/cloud ou personnalisé, de préférence avec un accès root, ce qui est hors de portée pour certains serveurs, en particulier les serveurs mutualisés ; vous pourriez faire tomber tout le serveur.
L'hébergement Node.js deviendra plus simple, mais je ne pense pas qu'il puisse un jour être aussi pratique que de téléverser quelques fichiers PHP via FTP.
Huitième round : Performance
PHP est travailleur, et il existe de nombreux projets et options qui peuvent le rendre plus rapide. Même les développeurs PHP ayant des exigences strictes en matière de performance se soucient rarement de la vitesse, mais Node.js offre généralement de meilleures performances. Bien sûr, la performance dépend en grande partie de l'expérience et de l'engagement de l'équipe de développement, mais Node.js présente tout de même les avantages suivants :
Moins de dépendances
Toutes les requêtes vers des applications PHP doivent être acheminées via un serveur web pour démarrer l'interpréteur PHP et exécuter le code PHP. Node.js n'a pas besoin de ces dépendances, et vous utiliserez presque certainement un framework avec un serveur, comme Express, qui est léger et joue bien son rôle au sein de votre application.
Interpréteur plus petit et plus rapide
L'interpréteur de Node.js est plus petit et plus flexible que celui de PHP. Il n'est pas encombré par les problèmes de compatibilité hérités des anciennes versions du langage, et Google a beaucoup fait pour améliorer les performances du moteur V8.
Les applications sont toujours en ligne
PHP suit le modèle client-serveur standard. Chaque requête de page initialise l'application ; vous lisez les paramètres de configuration, vous vous connectez à la base de données, vous lisez les informations, vous générez le HTML. Les applications Node.js fonctionnent de manière persistante et ne doivent être démarrées qu'une seule fois. Par exemple, vous pouvez créer un unique objet de connexion à la base de données et le réutiliser pour toutes les requêtes. Certes, PHP a aussi des moyens d'y parvenir, comme l'utilisation de Memcached, mais ce n'est plus une fonctionnalité standard du langage.
E/S non bloquantes et pilotées par les événements
PHP, comme la plupart des autres langages côté serveur, utilise un modèle d'exécution bloquant. Lorsque vous exécutez une commande, par exemple la récupération de données depuis une base de données, vous devez attendre que cette commande soit terminée avant d'exécuter le contenu suivant. Node.js n'attend généralement pas. À la place, vous fournissez une fonction de rappel qui sera appelée une fois que la commande sera terminée. Par exemple :
// fetch records from a NoSQL database
DB.collection('test').find({}).toArray(process);
console.log('finished');
// process database information
function process(err, recs) {
if (!err) {
console.log(recs.length + ' records returned');
}
}
Dans cet exemple, la console affichera d'abord « finished », puis « N records returned », car la fonction process n'est appelée que lorsque toutes les données ont été renvoyées. En d'autres termes, l'interpréteur peut faire d'autres choses tout en traitant d'autres processus.
Notez que la situation est plus complexe et qu'il y a quelques mises en garde :
- Node.js/JavaScript ne peut s'exécuter que sur un seul thread, mais la plupart des serveurs web sont multi-thread et traitent les requêtes simultanément.
- Un processus JavaScript de longue durée lancé par un utilisateur empêchera le code des autres utilisateurs de s'exécuter, à moins de fractionner la tâche ou d'utiliser...Web Workers。
- Les benchmarks sont subjectifs et imparfaits ; vous pouvez trouver des exemples où Node.js est meilleur, et d'autres exemples opposés où PHP est meilleur. Les programmeurs essaient juste de prouver leurs convictions !
- Écrire du code asynchrone et piloté par les événements est très complexe et difficile.
Je ne peux parler que de mon expérience : mes applications Node.js sont nettement plus rapides que des applications PHP comparables. Les vôtres ne le seront peut-être pas, mais vous ne le saurez jamais sans essayer.
Neuvième round : la passion des développeurs
Cela dépasse l’objectif des « défis courants du développement web », mais c’est important. Si vous redoutez d’écrire du code tous les jours, alors peu importe quel langage est meilleur.
C’est difficile à comparer, mais certains développeurs PHP sont passionnés par PHP. Quand avez-vous lu pour la dernière fois un article ou un diaporama sur PHP qui vous a touché ? Peut-être n’est-il pas nécessaire d’en dire plus ? Peut-être est-ce une exposition plus faible ? Ou bien je n’ai pas cherché aux bons endroits ? PHP 7 a quelques nouvelles fonctionnalités, mais la technologie stagne depuis de nombreuses années. Malgré cela, peu de développeurs se plaignent de PHP.
JavaScript divise la communauté ; certains l’adorent, d’autres le détestent, et certains programmeurs sont indécis entre les deux. Malgré cela, les retours sur Node.js sont majoritairement positifs. Il est à l’avant-garde, en partie parce qu’il est nouveau, et les éloges pourraient ne pas durer. Pour l’instant, Node.js remporte cette manche.
Dixième manche : Perspectives
Peu importe quel langage côté serveur vous choisissez d’adopter ; même s’il n’est plus mis à jour, il continuera de fonctionner (youpi ColdFusion !). Bien que son utilisation se stabilise, beaucoup de gens utilisent encore PHP. Je garantis qu’il peut tenir encore vingt ans.
Node.js a connu une ascension rapide. Il offre une approche de développement moderne, utilisant la même syntaxe que le développement côté client tout en prenant en charge des fonctionnalités HTML5 révolutionnaires telles que WebSockets et Server-Sent Events. Malgré une certaine controverse autour des fonctions forkées du langage, l’utilisation de Node.js continue de croître de façon exponentielle.
Node.js va forcément grignoter des parts de marché de PHP, mais je ne pense pas qu’il puisse complètement le remplacer. Les deux technologies ont un bel avenir. Je déclare cette manche nulle.
Vainqueur final
Score final : Node.js remporte 5 manches, PHP remporte 4 manches, une manche nulle. Je pensais que cela pencherait d’un côté, mais le résultat est plus modéré que prévu.
Node.js a une certaine courbe d'apprentissage, pas idéal pour les débutants, mais il a remporté ce duel. De plus, si vous êtes un programmeur JavaScript solide qui aime ce langage, Node.js ne vous décevra pas. Il est plus moderne et offre sa propre expérience de développement web ; PHP ne vous manquera pas.
Mais ne dénigrez pas PHP ; PHP est toujours bien vivant. Vous ne devriez pas suivre la mode Node.js simplement parce que Node.js est plus rapide, plus récent ou plus tendance. PHP est facile à apprendre et prend toujours en charge des techniques de programmation professionnelles. L'aide est partout et le développement est simple. Même les développeurs Node.js inconditionnels doivent envisager d'utiliser PHP pour des sites web et des applications simples.
Mon conseil est : évaluez les options, choisissez un langage en fonction de vos besoins, ce qui est bien plus fiable que des articles de « comparaison » comme celui-ci.
Source : http://www.oschina.net/translate/php-vs-node-js