Maison développement back-end PHP8 L'impact des nouvelles fonctionnalités de PHP 8 JIT sur les performances des applications PHP

L'impact des nouvelles fonctionnalités de PHP 8 JIT sur les performances des applications PHP

Oct 30, 2020 pm 04:25 PM

Recommandé : "Tutoriel PHP8"

Avant-propos

La nouvelle fonctionnalité qui attire le plus l'attention dans le prochain PHP 8 est l'introduction du support JIT, j'ai brièvement présenté ce qu'est JIT et la différence avec Opcache. Voici un bref résumé :

  • JIT est basé sur l'optimisation Opcache et combiné avec les informations d'exécution pour compiler le bytecode en code machine. cached
  • L'optimisation Opcache existante n'est en aucun cas affectée et le JIT de PHP est fourni dans Opcache
  • JIT ne remplace pas Opcache, mais une amélioration, lorsque JIT est activé. Dans ce cas , si la couche inférieure de Zend découvre qu'un bytecode spécifique a été compilé en code machine, elle peut contourner Zend VM et laisser directement le CPU exécuter le code machine, améliorant ainsi les performances du code.

Cela semble très haut de gamme, mais JIT est principalement optimisé pour les opérations gourmandes en CPU, et les applications Web PHP grand public actuelles sont toutes des opérations gourmandes en E/S, donc le JIT introduit dans PHP 8 est très efficace pour ces sites Web Les performances de l'application ont-elles été améliorées ? À cette fin, nous avons spécialement compilé et installé la version PHP 8 Alpha et effectué des tests de référence simples sur les applications en ligne de commande (opérations gourmandes en CPU) et les applications Laravel (opérations gourmandes en IO) pour le savoir.

Préparez une machine virtuelle Ubuntu

Remarque : le JIT de PHP ne peut prendre effet que sous l'architecture X86, utilisez donc les environnements PC, Mac et Linux avec Intel CPU Tout peut être pris en charge.

Comme PHP 8 n'est pas encore officiellement publié, vous pouvez uniquement télécharger le code source, le compiler et l'installer, vous devez donc préparer un environnement Linux comme environnement de test. De nombreux étudiants m'ont dit qu'ils n'avaient pas démontré le processus de fonctionnement sous Windows, j'ai donc choisi aujourd'hui spécifiquement d'installer Ubuntu 18.04 via WSL dans Windows 10 Professional Edition comme environnement de démonstration. C'est beaucoup plus simple que d'installer une machine virtuelle via Virtual Box ou VMWare. , je dois dire qu'à partir de Windows 10, il est devenu de plus en plus convivial pour les développeurs, même s'il y a encore une certaine distance par rapport à Mac. Après tout, Mac est un système natif de type Unix.

Pour en revenir au sujet, Windows fournit officiellement les documents correspondants pour l'installation de la version WSL de la machine virtuelle Ubuntu : Guide d'installation du sous-système Windows pour Linux pour Windows 10, suivez-le simplement, c'est très simple, sous Windows Après le téléchargement et l'installation depuis le store, vous pouvez cliquer sur le bouton Démarrer pour démarrer la machine virtuelle Ubuntu :

L'interface après ouverture est comme ça, elle ressemble à une fenêtre de terminal :

L'expérience d'utilisation de cette machine virtuelle est plus simple que celle des machines virtuelles traditionnelles. Par exemple, vous pouvez appeler directement des programmes hôtes Windows, tels que. en tant que VS Code, et les gérer via Nginx dans la machine virtuelle. Les applications Web sont également accessibles directement à partir du navigateur hôte Windows sans configurer le mappage des ports, il est donc très pratique de les utiliser comme environnement de test et de développement Linux local.

Bien sûr, si vous ne voulez pas essayer quelque chose de nouveau, vous pouvez utiliser une machine virtuelle traditionnelle ou le système Ubuntu natif.

Initialisation du projet de démonstration

Ensuite, nous devons installer Nginx, ainsi que PHP et Composer dans cette machine virtuelle Ubuntu via la fenêtre de terminal ouverte ci-dessus, via ce qui suit Vous pouvez le faire avec la commande :

sudo apt install nginx
sudo apt install php php-zip php-mbstring
sudo apt install composer
Copier après la connexion

Ensuite, installez le projet Web Laravel pour démonstration dans le répertoire racine Web par défaut de Nginx /var/www via Composer (la vitesse de téléchargement est lente, vous pouvez configurer le miroir global de Composer) :

sudo composer create-project --prefer-dist laravel/laravel blog 6.* -vvv
Copier après la connexion

Une fois l'initialisation terminée, vous pouvez utiliser php artisan serve pour tester si l'accès à ce projet est normal. Cela ne sera pas démontré ici.

Compilez et installez la version de test de PHP 8

Après avoir terminé les préparatifs ci-dessus, vous pouvez commencer à compiler et à installer la version de test de PHP 8. Tout d'abord, nous téléchargeons PHP 8. à partir du code source de la version Github Test (le téléchargement du package de code source du site officiel PHP est trop lent) :

wget https://github.com/php/php-src/archive/php-8.0.0alpha2.tar.gz
Copier après la connexion

Décompressez et entrez le répertoire racine du code source :

tar zxvf php-8.0.0alpha2.tar.gz
cd php-8.0.0alpha2
Copier après la connexion

Démarrez la compilation et l'installation process :

// 1、安装相关依赖库
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev \
libsqlite3-dev libssl-dev libcurl4-openssl-dev libpng-dev libonig-dev libzip-dev

// 2、生成 configure 文件
./buildconf --force

// 3、配置构建流程
./configure --prefix=/usr/local/php8 \
--with-config-file-path=/usr/local/php8 \
--enable-mbstring  \
--enable-ftp  \
--enable-gd   \
--enable-mysqlnd \
--enable-pdo   \
--enable-sockets   \
--enable-fpm   \
--enable-xml  \
--enable-soap  \
--enable-pcntl   \
--enable-cli   \
--enable-json  \
--enable-tokenizer \
--enable-ctype \
--enable-bcmath  \
--with-openssl  \
--with-pear   \
--with-zlib  \
--with-iconv  \
--with-curl  \
--with-zip

// 4、构建
make

// 5、安装
sudo make install
Copier après la connexion

La dernière étape a été exécutée avec succès. Ensuite, un texte d'invite s'affichera indiquant que PHP 8 a été installé avec succès. Vous pouvez également vérifier l'installation réussie via la commande suivante :

.

Le PHP 8 actuel est installé dans le répertoire /usr/local/php8.

Fichier de configuration d'initialisation

Pour compiler et installer PHP 8, vous devez copier et définir vous-même le fichier de configuration. Nous copions d'abord le fichier de configuration de base php.ini de. le répertoire du code source dans le répertoire d'installation de PHP :

sudo cp php.ini-production /usr/local/php8/php.ini
Copier après la connexion

Étant donné que JIT est fourni dans l'extension Opcache, vous devez d'abord démarrer cette extension, ouvrir /usr/local/php8/php.ini et décommenter les éléments de configuration suivants (supprimez simplement le point-virgule précédent ):

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
Copier après la connexion

Puis initialisez le fichier de configuration PHP-FPM.

Copiez d'abord le fichier binaire php8.0-fpm dans le répertoire /etc/init.d (fonctionnez toujours dans le répertoire de code source php-8.0.0alpha2) :

sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php8.0-fpm
sudo chmod +x /etc/init.d/php8.0-fpm
Copier après la connexion

进入 /usr/local/php8/etc 目录,初始化 PHP-FPM 配置文件:

cd /usr/local/php8/etc
sudo cp php-fpm.conf.default php-fpm.conf
Copier après la connexion

通过 vim 编辑器打开 php-fpm.conf,修改如下配置项(同时取消前面的分号注释):

pid = /run/php/php8.0-fpm.pid
Copier après la connexion

然后进入当前目录下的 php-fpm.d 子目录:

cd php-fpm.d
sudo cp www.conf.default www.conf
Copier après la connexion

打开 www.conf,修改如下配置项(同时取消前面的分号注释):

user = www-data
group = www-data

listen = /run/php/php8.0-fpm.sock

listen.owner = www-data
listen.group = www-data
listen.mode = 0660
Copier après la connexion

命令行应用基准测试

完成上述准备工作后,就可以正式开始测试工作了。

首先,我们来测试命令行应用,PHP 官方在源码中提供了一个基准测试文件,我们进入源码所在目录 php-8.0.0alpha2,通过如下命令测试不启动 JIT 情况下代码运行情况:

/usr/local/php8/bin/php -d opcache.jit_buffer_size=0 Zend/bench.php
Copier après la connexion

运行结果如下(运行时间,单位为 s):

然后,再通过下面这条命令测试启动 JIT 的情况下命令行代码的运行情况:

/usr/local/php8/bin/php -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php
Copier après la connexion

注:关于 opcache.jit_buffer_size 配置项比较好理解,而 opcache.jit 配置项对应配置值的每个数字代表不同含义,具体可以参考鸟哥的这篇博客:PHP 8 新特性之 JIT 简介,里面讲得非常详细,一般对于命令行应用,将该配置值配置为 1205,对于 Web 应用,配置为 1235 或者 1255。

最终运行结果如下:

可以看到,在 CPU 密集型操作的命令行应用中,启用 JIT 与不启用相比,耗时降低了接近 60%,性能提升了 2 倍

Web 应用基准测试

接下来,我们以 Laravel 演示项目为例,演示 PHP Web 应用中启用 JIT 与不启用性能有没有提升。

启动 PHP-FPM:

sudo /etc/init.d/php8.0-fpm start
Copier après la connexion

在 Nginx 中配置一个新的虚拟主机(/etc/nginx/sites-available/blog):

server {
    listen 80;
    server_name blog.test;
    root /var/www/blog/public;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
Copier après la connexion

然后进入 /etc/nginx/sites-enable 目录,创建这个虚拟主机的软连接:

sudo ln -s /etc/nginx/sites-available/blog blog
Copier après la connexion

启动 Nginx:

sudo service nginx start
Copier après la connexion

在 Windows 系统的 C:\Windows\System32\drivers\etc\hosts 文件中添加虚拟域名与主机地址的映射:

127.0.0.1 blog.test
Copier après la connexion

此时可以在 Windows 宿主机中通过浏览器访问对应的 Laravel 项目,表示部署成功:

然后,我们还是在 Windows 中,通过 ab 命令对 blog.test 首页进行压力测试(此时尚未启用 JIT):

ab -n 10 -c 10 http://blog.test/
Copier après la connexion

注:-n 表示总请求数,-c 表示最大并发请求数。

测试结果如下,重点关注 RPS(每秒处理请求数):

Limpact des nouvelles fonctionnalités de PHP 8 JIT sur les performances des applications PHP

最后,在 Ubuntu 虚拟机中,打开 PHP 8 的配置文件 /usr/local/php8/php.ini,在 Opcache 配置项下新增 JIT 配置:

opcache.jit=1235
opcache.jit_buffer_size=64M
Copier après la connexion

配置完成后,重启 PHP-FPM 服务,再次回到 Windows 宿主机,通过 ab 命令对 http://blog.test 页面进行压力测试:

ab -n 10 -c 10 -s 60 http://blog.test/
Copier après la connexion

注:-s 表示超时时间。

运行结果如下:

Limpact des nouvelles fonctionnalités de PHP 8 JIT sur les performances des applications PHP

可以看到在 IO 密集型操作的 Web 应用中,启用 JIT 与不启用相比,性能不但没有提升,反而有 10% 左右的损耗,至少在 Laravel 应用中是如此。

小结

当然,这里的测试仅限于的 Ubuntu 虚拟机环境(Windows WSL 版,配置是 8C8G),并且我也只是将 JIT 参数调整为官方建议的参数,没有做更多的对比测试,但是可以肯定的是 JIT 对 CPU 密集型操作优化效果很好,对 Web 应用性能是否有提升,取决于你的环境和配置的调优,因此 JIT 对 IO 密集型操作应用的性能优化效果有限,更适用于 CPU 密集型操作场景的性能优化,比如图像处理、机器学习等。

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 de ce site Web
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

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

Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Guide d'installation de PHP 8: étape par étape pour Windows, MacOS et Linux Guide d'installation de PHP 8: étape par étape pour Windows, MacOS et Linux Mar 10, 2025 am 11:14 AM

Ce guide détaille l'installation de PHP 8 sur Windows, MacOS et Linux. Il couvre les étapes spécifiques au système d'exploitation, y compris l'utilisation des gestionnaires de packages (Homebrew, APT), l'installation manuelle à partir de la source et la configuration de PHP avec Apache ou Nginx. Les conseils de dépannage sont un

Comment puis-je tirer parti du phpstan pour l'analyse statique dans PHP 8? Comment puis-je tirer parti du phpstan pour l'analyse statique dans PHP 8? Mar 10, 2025 pm 06:00 PM

Cet article explique comment utiliser le phpstan pour une analyse statique dans les projets PHP 8. Il détaille l'installation, l'utilisation de la ligne de commande et la configuration phpstan.neon pour la personnalisation des niveaux d'analyse, l'exclusion des chemins et la gestion des règles. Les avantages incluent

PHP 8: Manipulation de la date et de l'heure - Master la classe DateTime PHP 8: Manipulation de la date et de l'heure - Master la classe DateTime Mar 10, 2025 am 11:29 AM

Cet article détaille la classe DateTime de Php 8 pour la manipulation de date / heure. Il couvre les fonctionnalités fondamentales, l'amélioration de la gestion des erreurs, les types d'union et les attributs. Meilleures pratiques pour les calculs efficaces, la manipulation du fuseau horaire et l'internationalisation

Comment rester à jour avec les dernières meilleures pratiques et tendances PHP 8? Comment rester à jour avec les dernières meilleures pratiques et tendances PHP 8? Mar 10, 2025 pm 06:04 PM

Cet article détaille comment rester à jour sur les meilleures pratiques PHP 8. Il met l'accent sur l'engagement cohérent avec des ressources telles que les blogs, les communautés en ligne, les conférences et la documentation officielle. Caractéristiques clés de Php 8 telles que les types d'union, les arguments nommés,

PHP 8 Sécurité: protégez votre site Web contre les vulnérabilités communes PHP 8 Sécurité: protégez votre site Web contre les vulnérabilités communes Mar 10, 2025 am 11:26 AM

Cet article examine les vulnérabilités de sécurité PHP 8 courantes, y compris l'injection SQL, les XSS, le CSRF, le détournement de session, l'inclusion de fichiers et le RCE. Il met l'accent

PHP 8: Travailler avec des tableaux - Conseils et astuces pour une gestion efficace des données PHP 8: Travailler avec des tableaux - Conseils et astuces pour une gestion efficace des données Mar 10, 2025 am 11:28 AM

Cet article explore une manipulation efficace des baisses dans PHP 8. Il examine les techniques d'optimisation des opérations de tableau, notamment en utilisant des fonctions appropriées (par exemple, Array_Map), des structures de données (par exemple, SPLFixeDArray) et en évitant les pièges comme C-Brefustary C C.

Comment implémenter l'approvisionnement en événements dans PHP 8? Comment implémenter l'approvisionnement en événements dans PHP 8? Mar 10, 2025 pm 04:12 PM

Cet article détaille la mise en œuvre de l'approvisionnement en événements en PHP 8. Il couvre la définition des événements de domaine, la conception d'un magasin d'événements, la mise en œuvre de gestionnaires d'événements et la reconstruction des états agrégés. Meilleures pratiques, pièges communs et bibliothèques utiles (Prooph,

Comment rédiger des tests unitaires efficaces pour le code PHP 8? Comment rédiger des tests unitaires efficaces pour le code PHP 8? Mar 10, 2025 pm 06:00 PM

Cet article détaille les meilleures pratiques pour rédiger des tests unitaires de phpunit efficaces dans PHP 8. Il met l'accent sur des principes comme l'indépendance, l'atomicité et la vitesse, plaidant pour tirer parti des fonctionnalités de PHP 8 et éviter les pièges communs tels que la sur-moquette et

See all articles