Dans quelle mesure PHP 8 a-t-il amélioré les performances ?
À la fin de cette année, PHP8 sera publié. Bien que cette version majeure comporte de nombreuses nouveautés, telles que les types d'union, les retours statiques et les Attributs d'annotation, etc., l'amélioration la plus attendue est le Compilateur JIT.
Pour plus de fonctionnalités de PHP8, veuillez vous référer à PHP 8 est là ! L'équipe PHP a publié la première version bêta Alpha1
En théorie, la façon dont JIT gère la compilation des scripts PHP peut augmenter la vitesse des applications. Mais voyons si cette approche est à la hauteur de nos attentes.
Veuillez noter que le PHP-8 utilisé dans cet article n'est pas la version finale.
Tout d’abord, écrivons un morceau de code à exécuter. J'ai choisi le tri à bulles car c'est le pire algorithme de tri et je ne peux utiliser cet algorithme de tri que pour ce type de tests.
<?php function bubble_sort($array){ $start = microtime(true); do { $sw = false; for($i = 0, $size = count($array) - 1; $i < $size; $i++) { if( $array[$i] > $array[$i + 1] ) { list( $array[$i + 1], $array[$i] ) = array($array[$i], $array[$i + 1]); $sw = true; } } } while($sw); $end = microtime(true); return $end - $start; } $array = array(1000, -202, 3, 0, 2, 77, 5, -1, 4, 34, -203, 1, 0.5 , -3, 0.88, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201, 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201, 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201, 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01, 39000, 444, 0.99, -44, 4, 53, -4, 23, -201, 309900, 444, 0.99, 23, 123, 453, -4, 23, -201, 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201, 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201, 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201, -3000, -444, 0.99, -44, 4, 453, -4, 23, -1, 3000, 424, 0.19, -44, 4, 453, -4, 23, -21, 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1, 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201, 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -2010000 ); echo "\n"; echo bubble_sort($array); echo "\n"; ?>
Je sais que ce script n'est pas très bien écrit, surtout ce méchant tableau au milieu. Je sais que je peux générer un tableau aléatoire. Je sais aussi que je peux lire ce tableau à partir d'un fichier. Cependant, je veux juste un algorithme de bouillonnement très lent qui ne nécessite pas la prise en compte d'autres facteurs. Je ne veux pas de bruit supplémentaire dans ce benchmark.
Tout d'abord, nous avons exécuté le script dans la version actuelle de PHP 7.4 :
docker container run --rm -v $(pwd):/script/ php:7.4 php /script/bubble.php
L'exécuter 100 fois nous a donné un temps moyen de 0,10253500938416 secondes – pas mal.
Maintenant que nous tournons en PHP-8, n'activez pas encore le JIT.
docker container run --rm -v $(pwd):/script/ martinpham/php8:fpm-extra-alpine php /script/bubble.php
Le temps moyen pour la même course 100 fois est de 0,098223924636841 secondes. Pour être honnête, cette amélioration n’est pas très évidente.
Ensuite, testons le JIT tant attendu :
docker container run --rm -v $(pwd):/script/ keinos/php8-jit php /script/bubble.php
Le temps d'exécution moyen est de 0,053637981414795 secondes ! JIT est en effet une surprise ! Pour quelqu'un comme moi qui est très soucieux du temps d'exécution, c'est une aubaine. Même si l’on ne ressent pas grand-chose en regardant uniquement les chiffres (seulement une amélioration de 0,04458594322 secondes), une fois converti en pourcentage, l’avantage est mieux visible : 45,39 %.
Je voulais comparer sous plus d'angles, j'ai donc utilisé la version PHP-5.3 2009 pour exécuter ce code.
docker containers run --rm -v $(pwd):/script/ php:5.3 php /script/bubble.php
Cela a pris en moyenne 0,64574003219604 secondes. 0,5921020508 de plus que PHP-8 avec JIT activé (une baisse de -1 103,88) ! Oh mon Dieu, comment en sommes-nous arrivés là en 2009 ?
Remarque :
Le script que j'ai choisi n'a qu'un pur algorithme de bouillonnement. Bien sûr, vous pouvez essayer d’autres codes, comme le problème du voyageur de commerce ou un arbre binaire. Les résultats devraient être similaires.
Comme je l'ai mentionné dans l'article, la version de PHP-8 exécutée par ce benchmark n'est pas définitive, il est donc possible que la version finale ajoute d'autres améliorations.
J'ai conservé beaucoup de décimales dans les résultats du test, même si cela semble très verbeux, je voulais juste être aussi précis que possible.
En benchmarking, j'utilise les images docker de keinos et martinpham. En fait, il existe de nombreux autres outils, vous pouvez choisir celui que vous aimez et l'essayer.
L'ordinateur portable sur lequel j'ai effectué les tests était : Linux Manjaro, Intel Core i5 à 3 GHz, 32 Go de RAM. Dans d'autres configurations, les chiffres exacts peuvent varier, mais je pense que les améliorations seront similaires.
Pour une introduction détaillée au compilateur JIT, veuillez vous référer à cet article Nouvelles fonctionnalités de PHP8 - Explication graphique détaillée de JIT
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.
