Question

C’est quelque chose que je me suis toujours demandé: pourquoi PHP est-il plus lent que Java ou C #, si ces 3 langages sont compilés en code octet puis exécutés à partir de là? Je sais que, normalement, PHP recompile chaque fichier à chaque demande, mais même lorsque vous intégrez APC (cache bytecode) dans l’image, les performances sont loin d’être comparables à celles de Java ou C # (même si APC l’améliore considérablement).

Modifier: Je ne parle même pas de ces langues sur le Web. Je parle de la comparaison entre eux quand ils calculent les chiffres. Pas même le temps de démarrage ou quelque chose comme ça.

De plus, je ne prends aucune sorte de décision sur la base des réponses fournies ici. PHP est ma langue de choix; J'étais simplement curieux de son design.

Était-ce utile?

La solution

Une des raisons est le manque de compilateur JIT en PHP, comme d'autres l'ont mentionné.

Une autre raison importante est le typage dynamique de PHP. Un langage à typage dynamique sera toujours plus lent qu'un langage à typage statique, car les types de variable sont vérifiés au moment de l'exécution au lieu du moment de la compilation. En conséquence, les langages à typage statique tels que C # et Java vont être considérablement plus rapides au moment de l’exécution, même s’ils doivent généralement être compilés à l’avance. Un compilateur JIT rend cela moins problématique pour les langages à typage dynamique, mais hélas, PHP n’en a pas intégré (bien que voir la de Facebook de Facebook pour un exemple de JIT tiers pour PHP).

Autres conseils

Je suppose que vous vous intéressez un peu à la comparaison des pommes et des oranges - en supposant que vous utilisez tous ces langages pour créer des applications Web, cela ne se limite pas à la langue. (Et souvent, c'est la base de données qui vous ralentit; -)

Je ne suggérerais jamais de choisir l’une de ces langues plutôt que l’autre sur la base d’un argument speed .

Java et C # ont tous deux des compilateurs JIT , qui prennent le code intermédiaire et le compilent. en vrai code machine. Le fait de le compiler peut prendre du temps. C # et Java peuvent donc être ralentis, mais une fois que le code est compilé au format JIT, ses performances sont équivalentes à celles d'un script "réellement compilé". langage comme C ++.

La principale raison en est que les machines Java HotSpot de JVM et C # de C # utilisent toutes deux la compilation JIT (Just-In-Time). La compilation JIT compile les codes octets en code natif s’exécutant directement sur le processeur.

Je pense aussi que les bytecodes Java et CIL sont de niveau inférieur au bytecode interne de PHP, ce qui pourrait rendre beaucoup d'optimisations de JIT plus faciles et plus efficaces.

Une hypothèse improbable pourrait être que JAVA dépend d’un type d’application "application". PHP, ce qui signifie qu'un nouvel environnement doit être créé chaque fois qu'une page PHP est appelée.

(Cela était particulièrement vrai lorsque PHP était / est utilisé comme CGI, et non comme module Apache ou via FastCGI)


Une autre idée pourrait être que les compilateurs C # et JAVA peuvent procéder à de lourdes optimisations au moment de la compilation - en revanche, les scripts PHP étant compilés (au moins, si vous ne "trichez" pas avec un cache d'opcode) chaque fois qu'une page est appelée, la phase de compilation doit être très rapide; ce qui signifie qu'il n'est pas possible de passer beaucoup de temps à optimiser.


Toujours: chaque version de PHP s'accompagne généralement d'une amélioration des performances; par exemple, vous pouvez gagner entre 15% et 25% de la CPU lorsque vous passez de PHP 5.2 à 5.3.

Par exemple, jetez un coup d'œil à ces points de repère:


Une chose importante est aussi que PHP est assez facile à faire évoluer: ajoutez juste quelques serveurs web, et le tour est joué!

Le problème que vous rencontrez souvent lorsque vous passez de 1 à plusieurs serveurs est lié aux sessions: stockez-les dans des bases de données ou memcached (très facile) , et le problème résolu!


Sidenote: Je ne recommanderais pas une technologie, car il existe une différence de vitesse de quelques pour cent sur certains points de repère: il existe des facteurs bien plus importants, tels que le degré de connaissance de votre technologie par chaque équipe - ou même les algorithmes que vous utilisez. va utiliser!

Il n’existe aucun moyen pour un langage interprété d’être plus rapide qu’un langage compilé ou même un langage JIT dans des conditions triviales.

À moins que votre programme de test ne consiste à imprimer le message "Hello Worlds". si vous êtes préoccupé par la vitesse, restez fidèle à C # ou Java.

Cela dépend de ce que vous voulez faire. Dans certains cas, PHP est nettement plus rapide. PHP est (plutôt) doué pour la manipulation de fichiers et d’autres éléments de base (y compris les éléments XML). Java ou C # peuvent être plus lents dans ces cas (bien que je n’aie pas fait de benchmark).

De plus, la sortie PHP (HTML ou autre) doit être téléchargée sur le navigateur, ce qui prend également du temps.

De plus, la vitesse de Java / C # dépend beaucoup de la machine sur laquelle il tourne (qui peut être multiple). Java / C # peut être lent sur votre ordinateur, alors que PHP ne fonctionne que sur un serveur à partir duquel il est disponible et est toujours aussi rapide que le serveur (sauf pour les temps de téléchargement, etc.).

Je ne pense pas qu'ils soient comparables d'une manière générale. Je pense que vous devez prendre une tâche, ce qui pourrait être accompli avec ces trois langages de programmation, puis la comparer. En gros, c’est toujours ce que vous devez faire lorsque vous choisissez un langage de programmation; trouvez celui qui convient à la tâche. Ne modifiez pas la tâche tant qu'elle ne correspond pas au langage de programmation.

Selon wikipedia , PHP utilise Le moteur Zend , qui n'a pas de JIT .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top