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, a déclaré franchement que contrairement à cela. Nouveaux langages ordinaires Il est souvent facile de trouver de grandes marges d'amélioration dans les projets. La nouvelle version de PHP n'obtient pas de tels résultats en modifiant certains programmes.
Le langage de programmation Web vétéran PHP, vieux de 20 ans, publiera une nouvelle version de PHP 7 dès la fin octobre. Il s'agit de la première révision majeure en dix ans. En termes de performances, ce qui est meilleur que la version précédente, PHP 5 est deux fois plus rapide. Rasmus Lerdorf, le père de PHP, a déclaré qu'il peut même fonctionner plus rapidement que le programme PHP sous la machine virtuelle HHVM.
Un langage mature qui a subi de nombreuses révisions et d'innombrables optimisations au cours des 20 dernières années peut également connaître une percée qui double ses performances " Ce n'est pas une tâche facile, dit franchement Rasmus Lerdorf. Contrairement à d'autres nouveaux projets où il est facile de trouver beaucoup de marge d'amélioration, la nouvelle version de PHP n'obtient 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 de 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.
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éponde 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. Le développement est difficile à couvrir 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, PHP, qui pouvait à l'origine traiter des milliers de requêtes de pages Web en quelques secondes, a considérablement réduit ses performances et ne peut traiter que des dizaines de pages Web. 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.
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 signifie pas 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 promotion 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.
Tutoriel recommandé : "Tutoriel vidéo php"
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!