AXOPEN

JAVA vs PHP pour la création d’une application web ou site web en 2014

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 en 2014.

L’idée est de comparer les deux solutions Open Source et gratuit d’un point de vue décideur et développeur afin d’essayer d’y voir plus clair. A minima, connaitre les points forts et les points faible.

Pour les deux langages, nous prendrons les versions à jour, c’est-à-dire JAVA 8 et PHP 5.5, nous concentrant sur les raisons d’un choix en 2014 (ou nous écrivons ces lignes). Nous partirons du principe que nous n’avons pas d’historique et que nous pouvons partir d’une 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 framework de développement de chaque côté, la facilité de maintenance et d’évolutivité, les performances et enfin d’un point de vue organisationnelle.

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. Quand il est possible, nous mettrons un couleur verte pour le langage qui nous parait le meilleur. 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, l’utilisation de framework est requise. Que ce soit en JAVA ou en PHP, 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 qu’un bug en JAVA / JEE. Pourquoi? Essentiellement car un bug dans un traitement JAVA arrête le traitement, là ou un bug en PHP peut juste bloquer un peu l’affichage. Néanmoins lorsqu’un bug est détecté, est-il plus facile de le corriger en PHP ou en JAVA? Tout dépend bien sur de la structure et la qualité du développement, mais il s’avère à l’expérience qu’un 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, le langage PHP n’étant pas compilé, un certain nombre de bug ne se présenteront que lors de l’exécution. La phase de compilation JAVA permet elle d’en supprimer un grand nombre avant qu’il ne se produise.

Le packaging

Il n’existe pas à proprement parlé de packaging d’application PHP. Une application PHP n’est ni plus ni moins qu’un ensemble de fichier déposé dans un répertoire. La mise à jour d’une application PHP se révèle élémentaire par l’écrasement des fichiers précédents avec la version récente. L’inconvénient principale de cette approche est qu’il est plus difficile de savoir si la mise à jour s’est bien effectuée. Il faut en effet vérifier chaque fichier. Un autre avantage de cette technique est que l’intégralité des modifications sont toutes de suite disponible et qu’il n’est pas besoin de livrer toute l’application 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 l’intégralité des fichiers au sein d’un seul et même fichier, fichier WAR. Cet archive (ni plus ni moins qu’un fichier ZIP) possède un descripteur de déploiement ainsi que la possibilité de bien numéroter la version. La livraison d’une application se fait donc par la copie d’un seul et unique fichier. Là aussi le revers de la médaille est qu’il faut livrer tous les fichiers inclus dans le WAR et de fait transférer sur le serveur des archives qui peuvent être assez lourd (de quelques méga, à plusieurs dizaines de méga). Dernier « défaut » est qu’il est bien souvent nécessaire de redémarrer le serveur ou à défaut redémarrer l’application. (Cette opération ne dure généralement que quelques secondes voir minute dans le pire des cas)

Comparaison des serveurs

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

JEE nécessite un serveur d’application ou à minima un conteneur de servlet de type Tomcat pour déployer son application. L’utilisation de ce type de serveur exclue immédiatement les offres de type hébergement web, qui offre simplement un répertoire et un serveur Apache pour publier son site web. Quoiqu’il en soit ceci n’est 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 l’offre d’hébergement possible et peut réduire fortement le coût dans le cas d’un petit site web.

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

En terme de ressources machines, sur un site internet peu complexe, PHP aura tendance à être moins lourd et à consommer moins de ressources que JEE. Attention, la tendance s’inverse très rapidement lorsque nous sommes confronter à une application plus complexe qui nécessite de nombreux traitement métier. Si l’on prend par exemple les applications PHP d’OS 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 l’adhérence que cela crée avec la bonne volonté de l’éditeur du framework. En effet, lors des montées de version, il n’est pas toujours garanti que le framework soit rétrocompatible et on se retrouve rapidement avec une version obsolète. Dans le monde de l’entreprise, les choix technologiques et le développement des applications sont des choix qui durent pendant des années voir des dizaines d’années dans les très grandes entreprises. Il n’est pas possible de suivre « la mode » ou les variations rapides des frameworks juste pour le plaisir. De ce côté là, JEE s’en sort mieux car évolue beaucoup moins vite que la concurrence et s’oblige à être toujours rétrocompatible comme le langage JAVA.

PHP de son côté s’autorise des évolutions plus fréquentes sans être pour autant rétrocompatibles. Chaque montée de version implique de nombreux changement 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 l’univers mobile ANDROID, ce qui est un sacré argument lors que l’on sait qu’Android représente 80% des parts de marché. Ainsi, la formation et l’utilisation du code peut se faire qu’une seul fois, ce qui est un sacré gain de temps, là on PHP se cantonne à l’univers 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 d’un JVM, il est difficile d’obtenir des performances aussi bonnes qu’un 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 d’applications, tel que JBoss par exemple ont aussi largement fondues, ce qui permet presque d’avoir 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 d’application moderne et une application correctement développée, il est très difficile de perdre de la mémoire.

De son côté PHP, à suivi l’évolution inverse, partant d’un langage très simple et très performant, pour devenir un langage plus complet et plus « professionnel ». De plus l’utilisation de framework pour standardiser les développements ont considérablement augmenter les besoins de ressources. Il n’est 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 d’utilisateurs augmente. Si vous avez néanmoins la chance d’avoir un bon expert des performances, il est plus difficile pour lui d’améliorer significativement les performances pour l’intégralité de l’application 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 serveur et de partager le filesystem au niveau des sessions, ce qui peut se faire rapidement. Ceci est un grand plus, par contre vous laisser donc la base de donnée gérer les transactions. Il est aussi plus difficile de réaliser un cache distribué car la notion de cluster n’existe « pas vraiment ». La clusterisation est donc facilité mais, il n’est par exemple pas possible de réaliser simplement des singletons.

De son côté JAVA JEE, apporte nativement avec la notion de serveur 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 s’avé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 cruciale pour les entreprises. Le vol de données ainsi que les problèmes d’anonymats 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 qu’il 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 qu’il est presque impossible de faire des attaques de types SQL 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 l’intégration et l’apprentissage des développeur, le PHP s’avère être extremement 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é de manière procédurale, ce qui simplifie considérable la compréhension par les développeurs.
De son côté, JAVA s’avère être plus complexe de prise en main. L’utilisation du framework JEE ou Spring requiert un bon niveau d’abstraction et il n’est pas rare de voir les développeurs bloquer de longues heures devant des stacktraces d’erreur incompréhensible. Néanmoins, l’obligation de compiler son code force les développeurs à déclarer correctement leurs variables et permet d’appréhender vite des sources d’erreurs typiques. Il est vrai qu’un certain nombre de « module » de JEE (ou SPRING) apporte un vrai niveau de difficulté, par exemple JPA Hibernate, comme vu dans un précédent article crée souvent plus de problème qu’il n’en résout. Les premières applications WEB développées en JAVA ont connus 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 jeunesses et propose finalement un framework plus simple et plus léger que par le passé.
De son côté, PHP est né dans l’univers du WEB et spécialement construit autour de la problématique de la création de page web dynamique. Sa facilité d’utilisation et d’appré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éé avec PHP. Plus que des sites WEB, PHP a rapidement évolué pour être capable de gérer de site plus complexe. Par exemple des solutions telles que WordPress, MediaWiki, Drupal… ont vus le jour et sont devenues des références dans leurs secteurs, là ou JAVA JEE n’apportait pas la souplesse pour réaliser de telle application et surtout aussi rapidement.

Conclusion

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