PHP 8にはパフォーマンスを最適化するための新しい機能があり、スクリプトの実行速度を向上させる新しい機能として、JIT(Just In Time)コンパイルが追加されました。
純粋なインタープリタ言語にはコンパイルステップがなく、仮想マシン上で直接コードを実行します。しかし、PHPを含む多くのインタープリタ言語は、パフォーマンス向上のために軽量なコンパイルステップを持っています。
一方、事前コンパイル型(AOT: Ahead-Of-Time)のプログラミング言語では、コードを実行する前にコンパイルが必要です。
Just In Time(JIT)コンパイルは、インタープリタと事前コンパイルのハイブリッドモデルで、コードの一部または全部を実行時にコンパイルし、開発者が手動でコンパイルする必要がありません。
このオプションは、opcacheモジュールで制御されます。このモジュールはスクリプトの動作を高速化するために設計されており、JITを有効にすることでさらにスクリプトの実行速度が向上します。つまり、2倍の高速化が可能になります。
比較的な速度向上のグラフ。
今回の例では、php 8.3を使用します。
1. モジュールの有効性を確認する
php8.3 -m | grep OPcache
出力に「OPcache」が2回表示されることがあります。1回は一般セクションに、もう1回はZendモジュールセクションに表示されます。これは、モジュールが有効になっていることを意味します。
1.1 無効になっている場合は、有効にする
今回の例では、Debian 12を使用しており、パスは異なる場合があります。
nano /etc/php/8.3/fpm/conf.d/10-opcache.ini
; php opcacheモジュールの設定
; priority=10
opcache.enable=1
opcache.revalidate_freq=0
opcache.validate_timestamps=1
opcache.max_accelerated_files=10000
opcache.memory_consumption=192
opcache.max_wasted_percentage=10
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1
zend_extension=opcache.so
opcache.jit=on
1.2 PHP設定でモジュールを有効にする
nano /etc/php/8.3/fpm/php.ini
設定ファイルの最後に次の行を追加します。
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=256M
opcache.jit=1235
1.3 fpmを再起動する
service php8.3-fpm restart
service php8.3-fpm status
1.4 モジュールの存在を再確認する
php8.3 -m | grep OPcache
1.5 スクリプトで確認する
次の内容でPHPファイルを作成します。
touch info.php
nano info.php
<?php
phpinfo();
?>
ブラウザでhttp[s]://domain.tld/info.phpを開き、Ctrl + Fで「opcache」を検索して設定パラメータを見つけます。
これらの行は、OPcacheモジュールとJITアドオンが有効であることを示しています。