JAVA vs PHP pour la création d'une application web ou site web

Dans cet article, nous allons comparer de la manière la plus objective possible deux langages et technologies de programmation pour la réalisation d’un site web ou d’une application web.
Pierre LISERONMis à jour le 3 Juin 2014
comparatif java php

Dans cet article, nous allons comparer de la manière la plus objective possible deux langages et technologies de programmation pour la réalisation dun site web ou dune application web.

Lidée est de comparer les deux solutions Open Source et gratuites dun point de vue décideur et développeur afin dessayer dy voir plus clair. A minima, connaitre les points forts et les points faibles.

Pour les deux langages, nous prendrons les versions à jour en 2014, cest-à-dire JAVA 8 et PHP 5.5, nous concentrant sur les raisons dun choix en 2014 (où nous écrivons ces lignes). Nous partirons du principe que nous navons pas dhistorique et que nous pouvons partir dune feuille blanche pour notre choix.

Méthodologie de comparaison

Nous allons comparer différents points et essayer de trancher pour chaque point. Nous commencerons par la comparaison des langages en tant que tel. Puis, nous comparerons les frameworks de développement de chaque côté, la facilité de maintenance et dévolutivité, les performances et enfin dun point de vue organisationnel.

Comparaison des langages

Dans cette section, nous allons comparer point par point, les caractéristiques des deux langages afin de savoir de quoi il est question. Les autres points dépendent des goûts et aspirations de chacun.

Critère JAVA PHP
Paradigme Orientée objet, structurée, impérative Impératif, objet, fonctionnel, procédural, réflexif. Langage interprété
Typage Statique, fort, sûr, nominatif Dynamic, Faible
Version 8 5.5.11
Compatibilité ascendante OUI Pas toujours
Multiplateforme OUI OUI
Type d’application cible Toutes Web
Gestion UTF-8 OUI Partielle
Slogan Write once, run anywhere (WORA) PHP is a popular general-purpose scripting language that is especially suited to web development.
Popularité (selon l’index TIOBE) 16,9% 3,38%
Dynamisme (selon l’index TIOBE) -0,01% -2,4%
Pré-requis Une JVM Un interpréteur PHP et un serveur web (Souvent Apache)
Lourdeur de mise en place Moyen Faible
Environnement de développement Eclipse, IntelliJ, NetBeans, JDeveloper… Simple éditeur de texte, ou IDE intégré

Comparaison des frameworks

Généralement pour structurer et accélérer le développement, lutilisation de frameworks est requise. Que ce soit en JAVA ou en PHPLangage de programmation s’exécutant côté serveur et permettant la création dynamique de pages web ou d'APIs., il existe de nombreux framework très utilisés. En JAVA, on retrouve JEE et SPRING, en PHP majoritairement, ZEND et Symfony.

Nous allons donc essayer de comparer les approches même si celle-ci sont très différentes.

Critère JAVA JEE (ou SPRING) PHP Seul (sans framework) PHP ZEND ou Symfony
Réaliser une application WEB OUI OUI OUI
Comptabilité ascendante OUI OUI (sans changement de version majeure) OUI (sans changement de version majeure)
Nécessite un serveur d’application autre qu’un serveur WEB OUI NON NON
Supporté par un éditeur principal OUI (Oracle société privée mais responsable du langage JAVA) OUI NON
Version 7 / 4.0.5 5.5 2.3.1 / 2.4.4

Comparaison de la maintenance

En terme de maintenance, il est difficile de comparer les deux. En effet, un bug dans PHP est moins bloquant quun bug en JAVA / JEE. Pourquoi ?

Essentiellement car un bug dans un traitement JAVA arrête le traitement, là où un bug en PHP peut juste bloquer un peu laffichage.

Néanmoins lorsquun bug est détecté, est-il plus facile de le corriger en PHP ou en JAVA ? Tout dépend bien sûr de la structure et la qualité du développement, mais il savère à lexpérience quun bug PHP est plus pernicieux et plus difficile à cerner essentiellement car la qualité des logs est plus faible que celle présente en JAVA.

Qui plus est, le langage PHP nétant pas compilé, un certain nombre de bugs ne se présenteront que lors de lexécution. La phase de compilation JAVA permet elle den supprimer un grand nombre avant qu'ils ne se produisent.

Le packaging

Il nexiste pas à proprement parler de packaging dapplication PHP. Une application PHP nest ni plus ni moins quun ensemble de fichiers déposé dans un répertoire. La mise à jour dune application PHP se révèle élémentaire par lécrasement des fichiers précédents avec la version récente. Linconvénient principal de cette approche est quil est plus difficile de savoir si la mise à jour sest bien effectuée. Il faut en effet vérifier chaque fichier. Un autre avantage de cette technique est que lintégralité des modifications sont tout de suite disponibles et quil n’y a pas besoin de livrer toute lapplication pour la mettre à jour, un simple « patch » suffit généralement pour réaliser la mise à jour.

JAVA JEE adopte une approche différente avec le packaging de lintégralité des fichiers au sein dun seul et même fichier, fichier WAR. Cette archive (ni plus ni moins quun fichier ZIP) possède un descripteur de déploiement ainsi que la possibilité de bien numéroter la version. La livraison dune application se fait donc par la copie dun seul et unique fichier. Là aussi, le revers de la médaille est quil faut livrer tous les fichiers inclus dans le WAR et, de fait, transférer sur le serveur des archives qui peuvent être assez lourdes (de quelques méga, à plusieurs dizaines de méga). Dernier « défaut » est quil est bien souvent nécessaire de redémarrer le serveur ou, à défaut, redémarrer lapplication. (Cette opération ne dure généralement que quelques secondes voir minutes dans le pire des cas)

Comparaison des serveurs

Qui dit application web, dit serveur et hébergement. Même si le coût de lhébergement diminue de plus en plus avec les offres dIaaS qui se multiplient, cest un critère à prendre en compte lors du choix de la technologie.

JEE nécessite un serveur dapplication ou a minima un conteneur de servlet de type Tomcat pour déployer son application. Lutilisation de ce type de serveur exclut immédiatement les offres de type hébergement web, qui offrent simplement un répertoire et un serveur Apache pour publier son site web. Quoiquil en soit, ceci nest pas un frein car dans le monde professionnel toutes les applications sont hébergées sur des serveurs dédiés.

A contrario, PHP peut être déployé sur un serveur de type web ce qui étend loffre dhébergement possible et peut réduire fortement le coût dans le cas dun petit site web.

Les deux technologies peuvent être hébergées sur nimporte quel OS (Linux, Windows, AIX, ) car elles ne présentent aucune adhérence au système dexploitation.

En terme de ressources machines, sur un site internet peu complexe, PHP aura tendance à être moins lourd et à consommer moins de ressources que JEEJava Entreprise Edition. Attention, la tendance sinverse très rapidement lorsque nous sommes confrontés à une application plus complexe qui nécessite de nombreux traitements métier. Si lon prend par exemple les applications PHP dOS commerce de type Magento, elles nécessitent énormément de ressources pour fonctionner, multipliant les niveaux de caches et optimisation de filesystem pour tendre vers des performances « acceptables ».

Comparaison de lévolutivité

Le problème majeur des frameworks est souvent ladhérence que cela crée avec la bonne volonté de léditeur du framework. En effet, lors des montées de version, il nest pas toujours garanti que le framework soit rétrocompatible et on se retrouve rapidement avec une version obsolète. Dans le monde de lentreprise, les choix technologiques et le développement des applications sont des choix qui durent pendant des années voir des dizaines dannées dans les très grandes entreprises. Il nest pas possible de suivre « la mode » ou les variations rapides des frameworks juste pour le plaisir. De ce côté là, JEE sen sort mieux car évolue beaucoup moins vite que la concurrence et soblige à être toujours rétrocompatible comme le langage JAVA.

PHP de son côté sautorise des évolutions plus fréquentes sans être pour autant rétrocompatibles. Chaque montée de version implique de nombreux changements au niveau du code source. Le fait que PHP ne soit pas un langage pré-compilé implique une recherche et une modification fastidieuse du code source à chaque montée de version induisant un projet coûteux.

Il est aussi important de noter que le langage JAVA est utilisé pour tout lunivers mobile ANDROID, ce qui est un sacré argument lors que lon sait quAndroidAndroid est un système d'exploitation mobile basé sur Linux. représente 80% des parts de marché. Ainsi, la formation et lutilisation du code peut se faire quune seule fois, ce qui est un sacré gain de temps, là où PHP se cantonne à lunivers du WEB serveur.

Comparaison des performances

Historiquement, les performances de JAVA ne sont pas extrêmement bonnes. JAVA étant par définition un langage pré-compilé et interprété au sein dun JVM, il est difficile dobtenir des performances aussi bonnes quun langage tel que le C ou le C++. Néanmoins, de version en version et encore plus depuis la version 8, les besoins de JVM ont été largement revu à la baisse. Les besoins des serveurs dapplications, tel que JBoss par exemple ont aussi largement fondues, ce qui permet presque davoir le même niveau de consommation ressource. Qui plus est, les problèmes récurrents de JAVA concernant sa forte consommation mémoire ainsi que les fuites incessantes ont été en grande partie réglée, ce qui fait quà présent, avec un serveur dapplication moderne et une application correctement développée, il est très difficile de perdre de la mémoire.

De son côté, PHP a suivi lévolution inverse, partant dun langage très simple et très performant, pour devenir un langage plus complet et plus « professionnel ». De plus, lutilisation de frameworks pour standardiser les développements ont considérablement augmenter les besoins de ressources. Il nest par exemple par rare de devoir allouer 8Go de Ram pour des applications OS commerce dès que le catalogue de produits ou que le nombre dutilisateurs augmente. Si vous avez néanmoins la chance davoir un bon expert des performances, il est plus difficile pour lui daméliorer significativement les performances pour lintégralité de lapplication car les facteurs d’optimisation sont moins clairs à définir.

Le passage à léchelle des applications

Afin de clusteriser une application PHP, il suffit la plupart du temps de multiplier le nombre de serveurs et de partager le filesystem au niveau des sessions, ce qui peut se faire rapidement. Ceci est un grand plus, par contre vous laissez donc la base de données gérer les transactions. Il est aussi plus difficile de réaliser un cache distribué car la notion de cluster nexiste « pas vraiment ». La clusterisation est donc facilitée mais, il nest par exemple pas possible de réaliser simplement des singletons.

De son côté JAVA JEE, apporte nativement, avec la notion de serveurs, la possibilité de réaliser des clusters rapidement et sans développement, juste avec du paramétrage. Revers de la médaille, la configuration des clusters peut savérer assez complexe et peut dégrader les performances si celle-ci est mal appréhendée.

Sécurité

La sécurité des données devient un enjeu de plus en plus crucial pour les entreprises. Le vol de données ainsi que les problèmes danonymat sont des enjeux majeurs pour les entreprises actuelles.

Même si on ne peut parler de failles de sécurité dans les langages, les utilisateurs de PHP savent bien quil est plus difficile de se prémunir des attaques car le langage ne force pas à se sécuriser.

De son côté JEE, valide à chaque étape les données (en particulier avec JSF) de telle sorte quil est presque impossible de faire des attaques de types SQLLangage permettant de communiquer avec une base de données. injection par exemple. La relative lourdeur de JEE apporte un gain en sécurité très important, le contrôle et la validation des données nétant plus laissé à la simple discrétion du développeur mais est directement inclue au cœur du langage. Cet atout sécurité est indéniablement un plus pour le monde JEE.

Comparaison organisationnelle

Pour lintégration et lapprentissage des développeurs, le PHP savère être extrêmement rapide. En effet, il suffit la plupart du temps de faire un F5 pour voir ses modifications dans son navigateur. De plus une grande partie du code PHP est souvent utilisée de manière procédurale, ce qui simplifie considérable la compréhension par les développeurs.

De son côté, JAVA savère être plus complexe de prise en main. Lutilisation du framework JEE ou Spring requiert un bon niveau dabstraction et il nest pas rare de voir les développeurs bloquer de longues heures devant des stacktraces derreur incompréhensible. Néanmoins, lobligation de compiler son code force les développeurs à déclarer correctement leurs variables et permet dappréhender vite des sources derreurs typiques. Il est vrai quun certain nombre de « module » de JEE (ou SPRING) apportent un vrai niveau de difficulté, par exemple JPA Hibernate, comme vu dans un précédent article crée souvent plus de problème quil nen résout. Les premières applications WEB développées en JAVA ont connu un grand nombre déchec saisissant en entreprise car la technologie était mal appréhendée par les développeurs et mal adaptée au monde du WEB. Depuis les dernières versions, plus orientées vers le WEB JEE corrige ses défauts de jeunesse et propose finalement un framework plus simple et plus léger que par le passé.

De son côté, PHP est né dans lunivers du WEB et spécialement construit autour de la problématique de la création de page web dynamique. Sa facilité dutilisation et dappréhension par les développeurs en ont vite fait un langage de référence dans le monde du WEB. Très rapidement, de nombreux sites web ont été créés avec PHP. Plus que des sites WEB, PHP a rapidement évolué pour être capable de gérer des sites plus complexes. Par exemple des solutions telles que WordPress, MediaWiki, Drupal ont vu le jour et sont devenues des références dans leurs secteurs, là ou JAVA JEE napportait pas la souplesse pour réaliser de telle application et surtout aussi rapidement.

Conclusion

En conclusion, il nest pas évident de trancher entre ces deux technologies qui sont toutes les deux de bonnes technologies. Néanmoins, il se dégage de lanalyse que plus le projet est conséquent (en complexité et en nombre de développeurs) plus il devient intéressant de sorienter vers JAVA. A contrario, pour un site plus petit (et une plus petite équipe), il est plus facile de rester sur PHP.

Mais qu’en est-il de Java face à C# ou encore JS ?