Maison  >  Article  >  développement back-end  >  Explication détaillée de la clé pour doubler les performances de PHP7

Explication détaillée de la clé pour doubler les performances de PHP7

*文
*文original
2018-01-05 13:14:441704parcourir

Cet article présente principalement des informations pertinentes pour vous aider à comprendre la clé pour doubler les performances de PHP7. Les amis dans le besoin peuvent s'y référer. J'espère que cela aide tout le monde.

PHP 7 est la première révision majeure en dix ans. Sa plus grande fonctionnalité est une avancée en termes de performances. Elle peut être deux fois plus rapide que la version précédente de PHP 5. Rasmus Lerdorf, le père de PHP, a déclaré que. c'est encore plus rapide que la virtualisation HHVM. Les performances des programmes PHP sous l'ordinateur sont plus rapides.

HHVM est un mécanisme d'optimisation PHP personnalisé par Facebook pour les caractéristiques de son propre site Web, et peut ne pas être applicable à aucun site Web. Mais Rasmus Lerdorf a déclaré que l'un des objectifs de la nouvelle version est de permettre à tout développeur de site Web, même en utilisant le framework de développement Drupal et le système de commerce électronique open source Opencart, d'avoir les mêmes performances qu'en utilisant la technologie HHVM. A la veille de la sortie de la nouvelle version, il en a également profité pour venir à Taiwan pour assister à la conférence annuelle PHPConf Taiwan afin de partager la clé de la percée des performances de PHP 7.

Pour un langage mature qui a subi de nombreuses révisions et d'innombrables optimisations au cours des 20 dernières années, il n'est pas facile de réaliser une percée qui double les performances. Rasmus Lerdorf a admis qu'il n'est pas aussi facile à trouver que cela. la plupart des nouveaux projets. Il y a place à l'amélioration. La nouvelle version de PHP n'atteint pas de tels résultats en modifiant certains programmes. Au contraire, après de nombreuses optimisations détaillées et accumulation de performances, PHP 7 a des performances d'exécution qui ne sont pas inférieures à celles de HHVM.

Rasmus Lerdorf et l'équipe de contribution principale de PHP ont déployé beaucoup d'efforts pour réduire le nombre de bits de mémoire déplacés lorsque le programme est en cours d'exécution, accélérant ainsi les performances d'exécution. Par exemple, la structure de données zval pour stocker les variables en PHP est réduite de 24 bits à 16 bits, et Hashtable est réduite de 72 bits à 56 bits. Les fonctions en PHP sont examinées pour déterminer s'il existe une marge d'amélioration des performances.

En plus de réduire l'utilisation de la mémoire, Rasmus Lerdorf a également examiné le principe de fonctionnement de la ligne Cache du CPU pour comprendre comment le code du programme interagit avec le CPU, comment le compilateur compile le code du programme sous la nouvelle architecture du CPU et autres détails pour garantir que le code du programme PHP 7 est conforme à l'architecture des processeurs modernes. Bien que l'optimisation de chaque projet contribue pour moins de 0,5 % aux performances, car il existe de nombreux projets d'optimisation ou qu'une certaine fonction améliorée est appelée à plusieurs reprises par l'application, l'effet global de la correction peut être une si grande amélioration.

Inspirés par HHVM, nous avons décidé de construire PHP avec à la fois performances et fonctionnalités

Afin d'optimiser le fonctionnement de PHP, Facebook a créé la machine virtuelle HHVM avec compilation JIT. Bien que HHVM ait des performances d'exécution rapides, sa conception optimisée pour des objectifs spécifiques ne peut satisfaire qu'un petit nombre de développeurs. Au contraire, en plus d'améliorer les performances de PHP, Rasmus Lerdorf souhaite également répondre aux besoins des utilisateurs haut de gamme et des utilisateurs amateurs à la fois, faisant de PHP 7 un langage de programmation avec à la fois des performances et des fonctions générales.

Cependant, il n'est pas difficile de développer un langage de programmation qui répond aux besoins d'un petit nombre de personnes sur le marché. Cependant, le projet PHP vise de nombreuses cibles et doit répondre aux besoins des utilisateurs amateurs et professionnels. développeurs en même temps. Il est difficile de tout développer car il y aura toujours des groupes dont les besoins ne pourront pas être satisfaits. « C'est comme asperger une grande surface avec une conduite d'eau. Les vêtements de tout le monde seront un peu mouillés, mais les vêtements de personne ne le seront. être complètement trempé", a déclaré Rasmus Lerdorf.

Les performances informatiques de PHP sans l'utilisation de frameworks externes sont très bonnes. Cependant, en raison de l'influence de frameworks externes, les performances de PHP, qui peut traiter des milliers de requêtes de pages Web en quelques secondes, ont été réduites. a chuté de manière significative et il ne peut traiter que des dizaines de demandes. Rasmus Lerdorf a déclaré qu'avant l'émergence de HHVM, les utilisateurs étaient plus préoccupés par la capacité de PHP à réduire la difficulté du développement Web que par les exigences de performances de PHP, et ces frameworks peuvent faciliter le travail des développeurs. Cependant, après que Facebook a lancé HHVM, il a attiré de nombreux utilisateurs qui appréciaient les performances de PHP, ce qui a fait comprendre à Rasmus Lerdorf que de nombreux utilisateurs ont des besoins en performances. Il a commencé à réfléchir à la manière d'intégrer l'architecture JIT de HHVM avec PHP.

Mais Rasmus Lerdorf a déclaré que PHP et HHVM sont assez différents dans la conception architecturale. Par exemple, l'architecture multithread de HHVM n'est pas très stable. De plus, la portabilité de HHVM n'est pas bonne et il est encore loin de pouvoir fonctionner sur la plate-forme Windows. PHP compte de nombreux développeurs développant dans l'environnement Windows, et HHVM ne peut pas prendre en charge ces utilisateurs.

Rasmus Lerdorf a déclaré qu'il ne pouvait pas abandonner l'architecture principale de PHP. Bien qu'ils aient envisagé d'intégrer les deux, HHVM présente de nombreuses limitations d'utilisation. Bien que HHVM soit un très bon outil pour Facebook et de nombreux développeurs, pour les projets PHP, le champ d'utilisation de HHVM n'est pas assez large et ne peut répondre qu'aux besoins de projets spécifiques tels que Facebook ou Wikipédia.

En PHP, qui n'est pas un langage fortement typé, il est encore plus difficile d'importer du JIT

Par contre, ajouter une compilation JIT à PHP est très difficile. Rasmus Lerdorf a déclaré que JIT doit apprendre à identifier les modèles de fonctionnement (modèles) du programme, comme comprendre quelles parties sont des codes de programme importants et prédire quand le programme sera appelé ou quelles parties du programme seront appelées avant que le programme ne soit appelé. courir.

Rasmus Lerdorf a déclaré que dans de nombreuses voitures, JIT doit être capable de prédire quelle partie de la voiture tournera à droite, quelle partie de la voiture tournera à gauche ou quelles voitures de certaines couleurs iront tout droit "Et. JIT doit tous les prédire. " Correct, sinon les performances seront considérablement réduites. " Cependant, si la prédiction est correcte, les performances d'exécution du programme seront grandement améliorées.

Il n'est pas facile d'ajouter JIT à la compilation des langages de programmation généraux. Rasmus Lerdorf a déclaré qu'il est encore plus difficile d'ajouter JIT en raison de la nature dynamique de PHP. Par exemple, il a dit que le développeur a déclaré la valeur du paramètre $a comme étant 1, mais cela ne signifie pas que la valeur de tous les $a du programme est 1, car la valeur du paramètre peut être facilement redéfinie en PHP. En langage C, lorsque le développeur déclare que le paramètre a est un entier, alors a sera toujours un entier. Si quelque part dans le programme déclare que a est un type autre qu'un entier, même la compilation ne sera pas possible. Et comme le langage C est un langage de programmation fortement typé, "JIT peut prédire que la variable a est un nombre entier, mais en PHP, nous n'avons pas ce luxe." Il a expliqué que l'approche de HHVM est celle où JIT apprend que a est un nombre entier. type Après cela, on suppose que a est toujours un entier.

Afin d'utiliser la compilation JIT, HHVM a limité dans une certaine mesure le développement de PHP. Les utilisateurs de HHVM doivent déclarer clairement la nature des variables, mais les développeurs utilisant PHP peuvent d'abord déclarer une catégorie (Classe) sans nature, puis spécifier les attributs variables de la classe. "Sans aucune restriction, ajouter JIT à PHP est ce que nous devons faire." Il a déclaré que PHP doit prendre en compte les développeurs de WordPress, Drupal et d'autres frameworks, et ne peut pas arbitrairement arrêter de prendre en charge ces frameworks. Par conséquent, par rapport à HHVM, PHP a plus de restrictions sur la création de JIT.

Cependant, "Cela ne veut pas dire que nous ne pouvons pas faire du JIT. De plus, nous devons également contrôler la direction du développement de PHP", a déclaré Rasmus Lerdorf.

Actuellement, Dmitry Stogov, l'un des principaux contributeurs à PHP, développe un prototype JIT et utilise des applications expérimentales pour tester son fonctionnement. Rasmus Lerdorf a déclaré que si ce JIT est utilisé pour effectuer certaines opérations répétitives ou programmes en boucle, les performances de PHP 7 peuvent être rendues 10 fois plus rapides.

Cependant, il a également admis que lorsque ce JIT expérimental était utilisé dans WordPress, il n'obtenait aucun effet d'accélération. « Le JIT que nous voulons créer n'est pas quelque chose qui s'apprend dans les manuels universitaires, mais quelque chose qui peut être utilisé. en JIT travaillant dans le monde réel", a-t-il déclaré. Parce que PHP a toujours défendu de tels idéaux, en essayant de résoudre les problèmes de la vie des gens et en opérant dans des environnements en ligne réels, et pas seulement dans les théories des manuels.

Rasmus Lerdorf a déclaré que lorsque PHP est sorti pour la première fois, il passait au moins 16 heures par jour à développer PHP. Mais maintenant, il a progressivement réduit ses investissements dans le développement et a plutôt consacré son énergie à la publicité et aux discours à travers le monde. Il a dit en plaisantant : « Au lieu de le développer moi-même, il vaut mieux inspirer des gens bien plus intelligents que moi et prêts à passer dix-huit heures par jour à écrire des programmes pour développer PHP. » Il a dit que son objectif ultime est qu'il n'y en ait pas. une seule ligne en PHP écrite par lui. Code de programmation : "Tout projet en pleine croissance ne devrait pas être dirigé par un seul développeur. L'ancien code de programme devrait être remplacé par un nouveau code de programme." Et il pense que les autres développeurs devraient viser cela.

Recommandations associées :

Explication détaillée de la façon dont PHP implémente les codes de vérification exploitables

Explication détaillée de la façon dont PHP implémente la recherche de fichiers

Explication détaillée de la façon dont PHP accède à la page Web correspondante en fonction de la langue de l'utilisateur

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn