recherche
Maisondéveloppement back-endtutoriel phpInterprétation complète de l'optimisation et des améliorations de la version php8.0

Interprétation complète de l'optimisation et des améliorations de la version php8.0

À moins d'avoir vécu sous un rocher, ou de vivre dans le passé, vous vous rendrez compte que JIT arrivePHP 8 : le vote s'est tranquillement clôturé aujourd'hui, avec une nette majorité en faveur Fusionné avec PHP8, c'est donc officiel. Cet article explique en détail l'optimisation et l'amélioration de la version php8.0.

Annonce officielle de PHP8 "PHP 8 est là ! L'équipe PHP a publié la première version bêta Alpha1

Maintenant, asseyez-vous et lisez l'article suivant qui brise les mythes dans lequel nous clarifierons quelques éléments sur ce qu'est JIT et quels en seront les avantages. apportez de la confusion et approfondissez son fonctionnement (mais seulement un peu parce que je ne veux pas vous ennuyer).

Comme je ne sais pas à qui je parle, je vais commencer par des questions simples et passer ensuite aux questions complexes, que vous pouvez ignorer si vous êtes déjà sûr de savoir la réponse à la question dans le titre Cette partie. . .

Qu'est-ce que le JIT ?

PHP implémente une machine virtuelle, un processeur virtuel, que nous appelons Zend VM. PHP compile des scripts lisibles par l'homme en instructions (nous les appelons des opcodes) que la machine virtuelle peut comprendre. Cette étape d'exécution est ce que nous appelons le « temps de compilation ». Lors de la phase d'exécution "runtime", la machine virtuelle (Zend VM) exécute les instructions du code (opcodes).

Tout cela fonctionne très bien, des outils comme APC (dans le passé) et OPCache (maintenant) peuvent mettre en cache les instructions du code (opcodes) afin que le "temps de compilation" ne se produise que lorsque cela est nécessaire.

Tout d'abord, il y a une ligne de code qui explique ce qu'est JIT :

Just-in-time est une stratégie de compilateur qui accepte une représentation intermédiaire du code et la convertit en dépendances au moment de l'exécution. Spécifique à l'architecture code machine pour une exécution rapide.

En PHP, cela signifie que le JIT utilisera les instructions générées par Zend VM comme représentation intermédiaire et émettra du code machine dépendant de l'architecture, donc l'hôte du code n'est plus ZendVM, mais le CPU.

Pourquoi PHP a-t-il besoin de JIT ?

Avant PHP 7.0, la communauté interne PHP se concentrait sur la performance, provoquée par une saine concurrence provoquée par le projet HHVM de Facebook. La plupart des changements fondamentaux de PHP 7.0 ont été inclus dans le correctif PHPNG, qui a considérablement amélioré la façon dont PHP utilisait la mémoire et le processeur sur son cœur, et depuis lors, chacun d'entre nous a été obligé de se concentrer sur les performances.

Depuis PHP 7.0, il y a eu quelques améliorations de performances, des optimisations de HashTable (les structures de données de base de PHP), des spécialisations Zend VM pour certains opcodes, des spécialisations du compilateur pour certaines séquences et des améliorations continues du composant optimiseur d'OPCache. . . Il y a tellement d'autres choses à part ça, c'est tellement ennuyeux.

C'est une dure vérité que ces optimisations ne peuvent nous mener que jusqu'à présent et que nous approchons rapidement, ou que nous avons peut-être heurté un mur de briques dans notre capacité à l'améliorer davantage.

REMARQUE : Quand nous disons « nous ne pouvons plus l'améliorer », ce que nous voulons vraiment dire, c'est « nous devons faire des compromis pour ne plus l'améliorer ». ça a l'air attrayant". . . Chaque fois que nous discutons d’optimisation des performances, nous discutons de compromis. Il y a souvent un compromis entre simplicité et performance. Nous aimons tous penser que le code le plus simple est le code le plus rapide, mais dans le monde moderne de la programmation C, ce n’est pas le cas. Le code le plus rapide est généralement un code préparé pour tirer parti des intrinsèques dépendants de l’architecture ou des intrinsèques dépendants de la plate-forme (compilateur). La simplicité ne garantit pas les meilleures performances. . .

À l'heure actuelle, la fonctionnalité JIT de PHP semble être le meilleur moyen d'obtenir plus de performances de PHP.

JIT rendra-t-il mon site Web plus rapide ?

Possible, pas évident.

n'est peut-être pas la réponse que vous attendiez : en général, les applications écrites en PHP sont I/O绑定 et JIT fonctionnent mieux sur CPU绑定 code.

Que signifie exactement « Liaison E/S et CPU » ?

Nous utilisons les termes I/O绑定 et CPU绑定 lorsque nous souhaitons décrire les caractéristiques générales de performances d'un morceau de code ou d'une application.

La façon la plus simple de le dire est :

  • Un morceau de code lié aux E/S, si nous pouvons améliorer (réduire, optimiser) les E/S qu'il effectue, le fera courir plus vite.

  • Un morceau de code lié au CPU s'exécutera plus rapidement si nous pouvons améliorer (réduire, optimiser) les instructions que le CPU exécute, ou (comme par magie) augmenter la vitesse d'horloge du CPU : )

  • Un morceau de code ou une application peut être lié aux E/S, au CPU, ou à la fois au CPU et aux E/S de manière égale.

  • De manière générale, les applications PHP ont tendance à être liées aux E/S - ce qui les ralentit, ce sont les E/S qu'elles effectuent - connexion, lecture et écriture dans des bases de données, des caches, des fichiers, des sockets, etc. .

À quoi ressemble le PHP lié au CPU ?

En raison de la nature de la plupart des applications PHP, de nombreux programmeurs PHP ne sont pas familiers avec le code lié au processeur - leur travail consiste souvent à se connecter à une base de données, ou peut-être à un cache, à effectuer un travail et des sorties légers. une html/json/xml réponse.

Vous pourriez parcourir la base de code et trouver beaucoup de code qui n'a rien à voir avec les E/S, ou même du code qui appelle des fonctions complètement déconnectées des E/S, et être confus, et je semble impliquer que ce n'est pas le cas. Cela ne limite pas le processeur de votre application, même s'il peut y avoir plus de lignes de code gérant les non-E/S que les E/S.

PHP est en fait assez rapide, c'est l'un des langages interprétés les plus rapides au monde. Il n'y a pas de différence significative entre la Zend VM appelant une fonction qui n'a rien à voir avec les E/S et le fait d'effectuer le même appel en code machine.

Il y a évidemment une différence, mais le fait est que le code machine a une convention d'appel, Zend VM a une convention d'appel, le code machine a un prologue, Zend VM a un prologue : appeler quelque chose dans un opcode Zend c_level_function() ou le code machine n'a pas d'impact significatif sur les performances de l'application appelante - bien qu'il semble avoir un impact important sur cet appel.

Remarque : La convention d'appel fait grossièrement référence à une série d'instructions exécutées avant d'entrer dans une autre fonction, et le prologue fait référence à une série d'instructions exécutées lors de la saisie d'une autre fonction : dans les deux cas , la convention d'appel place les paramètres sur la pile et le prologue les supprime de la pile.

Qu'en est-il des boucles, des appels de queue et des X ? Je vous entends demander : PHP est en fait très intelligent, et avec le composant d'optimisation d'OPCache activé, c'est comme si votre code était transformé comme par magie en la forme la plus efficace que vous puissiez écrire.

Maintenant, il est important de noter que le JIT ne change pas la convention d'appel des fonctions Zend, plutôt que celle établie par la VM - Zend doit pouvoir basculer entre les modes JIT et VM à tout moment, donc la décision de conserver celle établie par la convention VM Calling. Ainsi, lorsque le JIT est en cours d’exécution, ces appels ne sont pas significativement accélérés partout.

Si vous voulez voir à quoi ressemble le code PHP lié au CPU, consultez la documentation Zend/bench.php... Il s'agit évidemment d'un exemple extrême de code CPU, mais il devrait nous donner une idée d'où le JIT brille vraiment C'est dans le domaine des mathématiques.

PHP constitue-t-il le compromis ultime pour des mathématiques plus rapides ?

Non, nous avons fait cela pour élargir la portée de PHP, et pas mal.

De l'avis de ce développeur PHP très partial, si vous êtes un programmeur web en 2019 et que vous n'avez pas envisagé d'utiliser PHP dans votre prochain projet, alors vous faites mal le web.

Améliorer la capacité d'effectuer des calculs plus rapidement en PHP, à première vue, semble être une portée très étroite.

Cependant, cela ouvre en fait la porte à l'apprentissage automatique, au rendu 3D, au rendu 2D (GUI) et à l'analyse de données (pour n'en nommer que quelques-uns).

Pourquoi ne pouvons-nous pas l'utiliser dans PHP 7.4 ?

Je viens d'appeler JIT le "compromis ultime", et je pense que c'est le cas : c'est sans doute l'une des stratégies de compilateur les plus complexes jamais conçues, peut-être la plus complexe. L’introduction de JIT introduit une complexité considérable.

Si vous demandiez à Dmitry (l'auteur de JIT) s'il avait créé du PHP complexe, il répondrait "Non, je déteste la complexité" (c'est une citation directe).

En fin de compte, la complexité est quelque chose que nous ne comprenons pas, et actuellement, il y a très peu de développeurs internes (moins de quelques-uns) qui comprennent vraiment la mise en œuvre du JIT.

PHP 7.4 évolue rapidement et la fusion avec php7.4 nous laissera avec une version de PHP que seules quelques personnes peuvent déboguer, corriger ou améliorer (dans le vrai sens du terme). Pour ceux qui ont voté contre la fusion avec PHP 7.4, cette situation est inacceptable.

D'ici PHP 8, beaucoup d'entre nous travailleront dur pour comprendre le JIT pendant notre temps libre :

Nous avons encore certaines fonctionnalités à implémenter et devons être retravaillées pour php8 Pour écrire des outils, nous devons d’abord comprendre JIT. Nous avons besoin de ce temps et sommes extrêmement reconnaissants qu’une majorité d’électeurs aient jugé bon de nous l’accorder.

La complexité n'est pas synonyme de terrible :

La complexité peut être belle, et comme une nébuleuse, JIT est ce genre de complexité. En principe, vous pouvez comprendre pleinement quelque chose de complexe et ne réduire que légèrement sa complexité apparente. En d’autres termes, même s’il y avait 20 développeurs internes aussi familiers avec JIT que Dmitry, cela ne changerait pas vraiment la complexité du JIT.

Le développement PHP va-t-il ralentir ?

Il n’y a aucune raison de penser que ce soit le cas. Nous avons suffisamment de temps pour affirmer avec certitude qu'au moment où PHP 8 sera généralement disponible, suffisamment d'entre nous seront familiers avec JIT pour être au moins aussi utiles qu'aujourd'hui pour corriger les bugs et faire avancer PHP.

Lorsque vous essayez de relier cela au fait que JIT est intrinsèquement complexe, considérez que la plupart du temps que nous passons à introduire une nouvelle fonctionnalité est en fait consacré à discuter de cette fonctionnalité. Pour la plupart des fonctionnalités, voire des correctifs, l'écriture du code peut prendre des minutes ou des heures, et les discussions peuvent prendre des semaines ou des mois. Dans de rares cas, l'écriture du code d'une fonctionnalité peut prendre des heures ou des jours, mais dans ces rares cas, les discussions prennent toujours plus de temps.

Pour une analyse détaillée de PHP8, veuillez vous référer à "Explication graphique JIT des nouvelles fonctionnalités de PHP8" " Dans quelle mesure les performances de PHP 8 ont-elles été améliorées ?

Cet article est directement traduit du site Web chinois php : https://blog.krakjoe.ninja/2019/03/php-gr8.html

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
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Au-delà du battage médiatique: évaluer le rôle de PHP aujourd'huiAu-delà du battage médiatique: évaluer le rôle de PHP aujourd'huiApr 12, 2025 am 12:17 AM

PHP reste un outil puissant et largement utilisé dans la programmation moderne, en particulier dans le domaine du développement Web. 1) PHP est facile à utiliser et intégré de manière transparente aux bases de données, et est le premier choix pour de nombreux développeurs. 2) Il prend en charge la génération de contenu dynamique et la programmation orientée objet, adaptée à la création et à la maintenance des sites Web rapidement. 3) Les performances de PHP peuvent être améliorées en mettant en cache et en optimisant les requêtes de base de données, et sa vaste communauté et son écosystème riche le rendent toujours important dans la pile technologique d'aujourd'hui.

Quelles sont les références faibles en PHP et quand sont-elles utiles?Quelles sont les références faibles en PHP et quand sont-elles utiles?Apr 12, 2025 am 12:13 AM

En PHP, les références faibles sont mises en œuvre via la classe FaibleRreference et n'empêcheront pas le collecteur des ordures de récupérer des objets. Les références faibles conviennent aux scénarios tels que les systèmes de mise en cache et les auditeurs d'événements. Il convient de noter qu'il ne peut garantir la survie des objets et que la collecte des ordures peut être retardée.

Expliquez la méthode magique __invoke en PHP.Expliquez la méthode magique __invoke en PHP.Apr 12, 2025 am 12:07 AM

La méthode \ _ \ _ Invoke permet aux objets d'être appelés comme des fonctions. 1. Définissez la méthode \ _ \ _ Invoquer afin que l'objet puisse être appelé. 2. Lorsque vous utilisez la syntaxe $ obj (...), PHP exécutera la méthode \ _ \ _ Invoke. 3. Convient pour des scénarios tels que la journalisation et la calculatrice, l'amélioration de la flexibilité et de la lisibilité du code.

Expliquez les fibres dans PHP 8.1 pour la concurrence.Expliquez les fibres dans PHP 8.1 pour la concurrence.Apr 12, 2025 am 12:05 AM

Les fibres ont été introduites dans PHP8.1, améliorant les capacités de traitement simultanées. 1) Les fibres sont un modèle de concurrence léger similaire aux coroutines. 2) Ils permettent aux développeurs de contrôler manuellement le flux d'exécution des tâches et conviennent à la gestion des tâches à forte intensité d'E / O. 3) L'utilisation des fibres peut écrire du code plus efficace et réactif.

La communauté PHP: ressources, soutien et développementLa communauté PHP: ressources, soutien et développementApr 12, 2025 am 12:04 AM

La communauté PHP fournit des ressources et un soutien riches pour aider les développeurs à se développer. 1) Les ressources incluent la documentation officielle, les tutoriels, les blogs et les projets open source tels que Laravel et Symfony. 2) Le support peut être obtenu via les canaux Stackoverflow, Reddit et Slack. 3) Les tendances de développement peuvent être apprises en suivant la RFC. 4) L'intégration dans la communauté peut être réalisée grâce à la participation active, à la contribution au code et au partage d'apprentissage.

PHP vs Python: comprendre les différencesPHP vs Python: comprendre les différencesApr 11, 2025 am 12:15 AM

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

PHP: Est-il en train de mourir ou est-ce simplement de s'adapter?PHP: Est-il en train de mourir ou est-ce simplement de s'adapter?Apr 11, 2025 am 12:13 AM

Le PHP n'est pas en train de mourir, mais d'adapter et d'évoluer constamment. 1) PHP a subi plusieurs itérations de version depuis 1994 pour s'adapter aux nouvelles tendances technologiques. 2) Il est actuellement largement utilisé dans le commerce électronique, les systèmes de gestion de contenu et d'autres domaines. 3) PHP8 introduit le compilateur JIT et d'autres fonctions pour améliorer les performances et la modernisation. 4) Utilisez OPCACHE et suivez les normes PSR-12 pour optimiser les performances et la qualité du code.

L'avenir de PHP: adaptations et innovationsL'avenir de PHP: adaptations et innovationsApr 11, 2025 am 12:01 AM

L'avenir de PHP sera réalisé en s'adaptant aux nouvelles tendances technologiques et en introduisant des fonctionnalités innovantes: 1) s'adapter aux architectures de cloud computing, de conteneurisation et de microservice, en prenant en charge Docker et Kubernetes; 2) introduire des compilateurs JIT et des types d'énumération pour améliorer l'efficacité des performances et du traitement des données; 3) Optimiser en continu les performances et promouvoir les meilleures pratiques.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.