En retard mais arrivé ! La revue PHP8 est ici ~
PHP 8 alpha 1 est sorti le 25 juin et php 8 alpha 2 est sorti le 9 juillet. Généralement, l'alpha 2 est une version légèrement utilisable, donc je l'ai évalué ce week-end.
Regardons d'abord les résultats :
Quand JIT n'est pas activé
php -d opcache.jit_buffer_size=0 Zend/bench.php simple 0.025simplecall 0.012simpleucall 0.012simpleudcall 0.012mandel 0.135mandel2 0.211ackermann(7) 0.082ary(50000) 0.012ary2(50000) 0.010ary3(2000) 0.186fibo(30) 0.283hash1(50000) 0.039hash2(500) 0.041heapsort(20000) 0.089matrix(20) 0.110nestedloop(12) 0.096sieve(30) 0.045strcat(200000) 0.019------------------------ Total 1.419
Quand JIT est activé :
php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php simple 0.001simplecall 0.000simpleucall 0.000simpleudcall 0.000mandel 0.005mandel2 0.006ackermann(7) 0.010ary(50000) 0.005ary2(50000) 0.004ary3(2000) 0.011fibo(30) 0.027hash1(50000) 0.027hash2(500) 0.018heapsort(20000) 0.011matrix(20) 0.011nestedloop(12) 0.006sieve(30) 0.004strcat(200000) 0.009------------------------ Total 0.155
Il y a aussi un cas où Opcache n'est pas activé Suivant :
php Zend/bench.php simple 0.051simplecall 0.017simpleucall 0.083simpleudcall 0.089mandel 0.506mandel2 0.409ackermann(7) 0.095ary(50000) 0.012ary2(50000) 0.010ary3(2000) 0.187fibo(30) 0.367hash1(50000) 0.040hash2(500) 0.041heapsort(20000) 0.097matrix(20) 0.122nestedloop(12) 0.093sieve(30) 0.063strcat(200000) 0.018------------------------ Total 2.299
Ne pas activer Opcache : 2,299 s Lorsqu'Opcache est activé mais que JIT n'est pas activé : 1,419 s Lorsque Opcache est activé et JIT est activé : 0,155 s
Lorsque JIT est activé, c'est près de 9,15 fois celui lorsque JIT n'est pas activé. Après plusieurs tests, cette valeur est stable entre 8 fois. et 10 fois.
Comment fonctionne MPF ?
Afin d'être proche de notre métier, nous avons testé sous le framework mpf
Environnement
aliyun centos 6.9
php7.test.com php- fpm un processus php8.test.com php-fpm un processus
Mpf deux interfaces
/v1/hello/wzh/index1
public function index1() { $this->output('123'); }
/v1/hello/wzh/index2
public function index2() { $a = 0; for ($i = 0; $i < 1000000; $i++) $a++; $this->output($a); }
Faisons un test de résistance
php7 Situation avec calcul faible
wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index1 Running 5s test @ https://php7.test.com/v1/hello/wzh/index1 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 432.97ms 76.00ms 527.38ms 92.17% Req/Sec 8.38 5.36 20.00 63.85% 396 requests in 5.09s, 121.43KB readRequests/sec: 77.78 Transfer/sec: 23.85KB
php7 Situation avec calcul élevé
wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index2 Running 5s test @ https://php7.test.com/v1/hello/wzh/index2 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.02s 569.99ms 1.96s 57.14% Req/Sec 3.18 3.43 10.00 80.88% 70 requests in 5.03s, 21.60KB read Socket errors: connect 0, read 0, write 0, timeout 42 Requests/sec: 13.91 Transfer/sec: 4.29KB
php8 Situation avec calcul faible lorsque JIT est activé
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1 Running 5s test @ https://php8.test.com/v1/hello/wzh/index1 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 34.48ms 4.34ms 95.45ms 87.87% Req/Sec 84.61 13.36 121.00 85.28% 5083 requests in 5.03s, 1.67MB readRequests/sec: 1010.55 Transfer/sec: 340.43KB
php8 JIT est activé pour de nombreux calculs
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2 Running 5s test @ https://php8.test.com/v1/hello/wzh/index2 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 97.84ms 4.97ms 159.50ms 92.12% Req/Sec 30.27 4.42 50.00 86.50% 1814 requests in 5.07s, 614.71KB readRequests/sec: 357.76 Transfer/sec: 121.23KB
php8 JIT est désactivé pour moins de calculs
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1 Running 5s test @ https://php8.test.com/v1/hello/wzh/index1 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 38.10ms 6.47ms 239.60ms 94.01% Req/Sec 77.50 12.76 110.00 89.63% 4622 requests in 5.04s, 1.52MB readRequests/sec: 916.22 Transfer/sec: 308.65KB
php8 JIT est désactivé pour de nombreux calculs
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2 Running 5s test @ https://php8.test.com/v1/hello/wzh/index2 12 threads and 36 connections Thread Stats Avg Stdev Max +/- Stdev Latency 766.16ms 181.30ms 887.08ms 88.37% Req/Sec 6.25 5.36 20.00 91.36% 215 requests in 5.09s, 72.86KB readRequests/sec: 42.22 Transfer/sec: 14.31KB
[ image:BA1A37D8-760E-4637-901B -3E3521F969E7-4107-0000191504DD1B2E/86D37899-3B46-4BDA-B396-E5C8DD51068E.png]

Trouvé que php8J a de faibles calculs IT équivaut à 13
fois les performances de php7, et plus il y a de calculs, plus l'optimisation est évidente. Lorsqu'il y a beaucoup de calculs, php8JIT est 25.7
fois les performances de php7.
Mais il y a un problème que je trouve incroyable. PHP8 a beaucoup d'optimisations sans JIT et moins de calculs. Je pensais que c'était un problème avec la direction des tests, mais après de nombreuses démonstrations, ces données sont exactes. J'ai le temps d'y réfléchir. Découvrez quels sont les points d'optimisation ici.
Processus de compilation
Tucao : La compilation manuelle de PHP devient de plus en plus difficile. La compilation a pris 2 heures et a marché sur N pièges. Afin de permettre à tout le monde d'écrire plus d'exigences, partagez. la fosse
Environnement
aliyun centos 6.9, notre société utilise généralement cette version.
compilation du code source php
wget https://downloads.php.net/~carusogabriel/php-8.0.0alpha2.tar.gz tar -zxf php-8.0.0alpha2.tar.gzcd php-8.0.0alpha2 ./configure --prefix=/yourdir/php8 --with-config-file-path=/yourdir/php8/etc --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-static --enable-sockets --with-zip --enable-calendar --enable-bcmath --enable-mbstring --with-zlib --with-iconv=/usr/local/libiconv --enable-gd --enable-mbstring --with-freetype --with-mysql-sock=/tmp/mysql.sock --disable-ipv6 --enable-debug --with-openssl --enable-opcache复制代码
Généralement, la génération du makefile échoue ici. Il existe des exemples d'échec de génération plus tard. Une fois la génération réussie,
make -j 8 make install cp php.ini-production /yourdir/php8/etc/php.ini
Configurez php.ini.
N'oubliez pas de noter l'ancienne configuration d'opcache.ini En dernière analyse, JIT est toujours une optimisation d'Opcache.
zend_extension=opcache.so opcache.enable=1 ; 命令行测试的话这里一定要打开 opcache.enable_cli=1 opcache.memory_consumption=512 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.validate_timestamps=1 opcache.revalidate_freq=300 opcache.fast_shutdown=1 opcache.enable_file_override = 1 opcache.blacklist_filename = /etc/php.d/opcache.blacklist ; 这里就是新的jit的配置 opcache.jit=1205 opcache.jit_buffer_size=64M
Solution pour configurer l'échec
Voici quelques problèmes avec ./configure failed
Problème 1
No package 'sqlite3' found
Solution
wget https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz tar -zxf sqlite-autoconf-3320300.tar.gzcd sqlite-autoconf-3320300 ./configure --prefix=/usr/local/lib/sqlite-3.32.0 make CFLAGS="-g -O2 -DSQLITE_ENABLE_COLUMN_METADATA"make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/sqlite-3.32.0/lib/pkgconfig"复制代码
Remarque
Ce n'est pas possible car la version dans le dépôt yum est trop basse.
yum install sqlite-devel
Problème 2
configure: error: Please reinstall the iconv library.
Solution
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxf libiconv-1.14.tar.gzcd libiconv-1.14 ./configure make make install
Problème 3
No package 'oniguruma' found
De même, miam ne fonctionne pas non plus, la version est trop basse.
yum install oniguruma-devel
Solution
wget https://github.com/kkos/oniguruma/archive/v6.9.5_rev1.tar.gz tar -zxf v6.9.5_rev1.tar.gzcd oniguruma-6.9.5_rev1/ autoreconf -vfi ./configure --prefix=/usr/local/lib/oniguruma-6.9.5 make make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/oniguruma-6.9.5/lib/pkgconfig"
Problème 4
No package 'libzip' found
Solution
wget https://libzip.org/download/libzip-1.7.2.tar.gz tar -zxf libzip-1.7.2.tar.gzcd libzip-1.7.2 cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/lib/libzip-1.7.2 make make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libzip-1.7.2/lib/pkgconfig"复制代码
Profitez de php 8 et 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

Undress AI Tool
Images de déshabillage gratuites

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.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

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)

Les étapes pour ajouter l'extension MySQL à PHP8 sont : 1. Installez la bibliothèque client MySQL ; 2. Installez les outils de développement pour PHP 8 ; 3. Téléchargez le code source de l'extension MySQL ; 4. Compilez et installez l'extension MySQL ; Extension MySQL ; 6. Redémarrez Juste un serveur Web.

Les différences entre php5 et php8 concernent les performances, la structure du langage, le système de types, la gestion des erreurs, la programmation asynchrone, les fonctions de bibliothèque standard et la sécurité. Introduction détaillée : 1. Amélioration des performances. Par rapport à PHP5, PHP8 présente une énorme amélioration des performances. PHP8 introduit un compilateur JIT, qui peut compiler et optimiser certains codes d'exécution à haute fréquence, améliorant ainsi la vitesse d'exécution. PHP8 introduit de nouvelles structures et fonctions de langage. PHP8 prend en charge les paramètres nommés, permettant aux développeurs de transmettre les noms des paramètres au lieu de l'ordre des paramètres, etc.

Cet article vous présentera comment installer Apache2.4 et comment configurer php8.0. L'article est accompagné d'images et d'étapes détaillées. Voyons comment installer et configurer Apache2.4+php8.0~.

PHP8 peut utiliser mysqli et PDO pour se connecter à la base de données. Introduction détaillée : 1. Utilisez mysqli pour vous connecter à la base de données en transmettant le nom du serveur de base de données, le nom d'utilisateur, le mot de passe et le nom de la base de données pour vous connecter. Ensuite, utilisez l'attribut `connect_error` pour vérifier si la connexion réussit et affichez un message d'erreur si la connexion échoue. Enfin, fermez la connexion en appelant la méthode `close()` ; 2. Utilisez PDO pour vous connecter à la base de données, et connectez-vous en passant le nom du serveur de base de données, le mot de passe et le nom de la base de données, etc.

Les méthodes du type de données php8 incluent la conversion d'une chaîne en entier, la conversion d'un entier en chaîne, la conversion d'une chaîne en nombre à virgule flottante, la conversion d'un nombre à virgule flottante en chaîne, la conversion d'un tableau en chaîne, la conversion d'une chaîne en tableau, la conversion d'une valeur booléenne en entier, la conversion d'un entier en Détermination et conversion de valeurs booléennes et de types de variables. Introduction détaillée : 1. La conversion d'une chaîne en un entier inclut la fonction intval() et la conversion de type forcée (int) ; 2. La conversion d'un entier en chaîne inclut la fonction strval() et la conversion de type forcée (string) ; une chaîne à un flotteur Points et ainsi de suite.

Les nouvelles fonctionnalités de php8 incluent le compilateur JIT, la déduction de type, les paramètres nommés, les types d'union, les propriétés, les améliorations de la gestion des erreurs, la prise en charge de la programmation asynchrone, les nouvelles fonctions de bibliothèque standard et les extensions de classe anonymes. Introduction détaillée : 1. Compilateur JIT, PHP8 introduit le compilateur JIT, ce qui constitue une amélioration importante des performances. Le compilateur JIT peut compiler et optimiser certains codes d'exécution à haute fréquence en temps réel, améliorant ainsi la vitesse d'exécution. 2. Dérivation de type, PHP8 ; introduit la fonction d'inférence de type, permettant aux développeurs de déduire automatiquement le type de variables lors de la déclaration des variables, etc.

Cet article vous guidera à travers le JIT dans PHP 8 et expliquera comment JIT participe au processus d'interprétation. J'espère qu'il sera utile à tout le monde !

Les performances améliorées de php8 incluent : 1. Introduction du compilateur JIT ; 2. Optimisation des appels de fonctions ; 3. Amélioration du mécanisme de récupération de place ; 4. Amélioration du système de types ; 6. Optimisation du traitement des chaînes ; . Améliorer le traitement des tableaux ; 8. Introduire un nouveau mécanisme de gestion de la mémoire ; 9. Optimiser la génération de code. Introduction détaillée : 1. L'introduction du compilateur JIT PHP8 introduit le compilateur JIT, qui est une technologie de compilation dynamique qui peut convertir le code PHP en code machine pour une exécution plus efficace ;
