PHP 8 は、Web 開発者が待ち望んでいた多くの新機能と改善を導入しましたが、その中で注目されているのが Just-In-Time (JIT) コンパイラの導入です。
この記事では、Xserver でも PHP 8 で新たに利用可能となった OPcache の JIT コンパイラについて、その特徴と設定方法、そしてパフォーマンスへの影響、実際の Xserver での設定方法について詳しく説明します。
JIT とは何か?
JIT とは Just-In-Time の略で、一種のコンパイラです。通常、コンパイラ言語(例えば C や C++)はソースコードを直接機械語に変換しますが、インタプリタ言語(例えば Python や PHP)はソースコードを逐次解釈して実行します。この差異により、コンパイラ言語の方がインタプリタ言語よりも通常高速です。
しかし、JIT コンパイラはこの両者の間のギャップを埋めるために設計されています。JIT コンパイラは、プログラムが実行される時にインタプリタ言語のソースコードを動的に機械語にコンパイルします。その結果、一部のタスクではインタプリタ言語でもコンパイラ言語に匹敵する高速性を達成できます。
PHP 8 と OPcache の JIT
PHP 8 では、JIT コンパイラが OPcache 拡張に追加されました。OPcache は、PHP のコードをオペコード(PHP の中間言語)にコンパイルし、その結果をキャッシュすることで、PHPのパフォーマンスを向上させる拡張機能です。しかし、PHP 8 の JIT コンパイラは、さらに一歩進んでオペコードを機械語にコンパイルします。
Xserver での JIT
Xserver では以下のようにアナウンスされています。
PHP8.0より追加された「OPcache」の拡張機能です。
サーバーで利用しているCPUが理解しやすい状態でキャッシュをしておき、次回以降、同じPHPにアクセスがあった際にキャッシュを利用することで、PHP実行時のCPU負荷の軽減やPHPの大幅な高速化を図るPHPの拡張モジュールです。
エックスサーバーでは提供中の全てのサーバーで「JIT」は標準で無効になっております。
有効化する場合は、「php.ini直接編集」メニューより編集してください。
引用:Xserver
Xserver での JIT の設定方法
JITを有効にするには、PHPの設定(php.ini)に以下の設定を追加します。
まず、PHP のバージョンを 8 以上にしていることが前提条件になります。
また、重要な設定ファイルを設定するので、十分気をつけて下さい。
php.ini 設定
サーバーパネルから、「php.ini設定」を選択し、設定したいドメインを選択します。
php.ini 編集
「php.ini直接編集」を選択し、内容を以下のように変更します。
[Zend Optimizer]
zendextension = opcache.so
;opcache.jit = off
;JIT
zendextension = opcache
opcache.enable = 1
opcache.jit = on
opcache.jitbuffersize = 128M
ここでは、「opcache.jit = on」と指定していますが、以下の4つのモードから選択することができます。
- off: JITは無効化されます。
- on: 最も基本的なJIT機能。ホットな(頻繁に呼び出される)関数とメソッドのみがJITされます。
- tracing: 高度なJIT機能。ホットなパス(頻繁に実行されるコードのシーケンス)全体がJITされます。
- function: ユーザーレベルの関数とメソッド全てがJITされます。
このうち、’tracing’が最も推奨されるモードで、最もパフォーマンスが向上する可能性が高いです。
確認と設定
「確認画面に進む」を選択後、「確定する」で反映されます。
以上で設定は終わりです。
まとめ
PHP 8 の JIT は、PHP のパフォーマンスを大幅に向上させる可能性を秘めた、非常に重要な新機能です。
特に計算処理が多いタスクを頻繁に行うアプリケーションでは、そのパフォーマンス向上効果は顕著です。
しかし、全ての Web アプリケーションが等しくその恩恵を受けられるわけではありません。I/O 操作が主なアプリケーション、例えばWordPress のような CMS では、その効果は一見するとそこまで効果は感じられないかもしれません。
しかし、WordPress のようなものも、使用しているプラグインやテーマ、カスタムコードの特性により、JIT のパフォーマンス向上効果が異なるという事実です。例えば、複雑な計算を必要とするプラグインや、大量のデータを処理するカスタムスクリプトがある場合、JIT はそのパフォーマンスを大いに引き上げる可能性があります。
以上の観点から見て、PHP 8のJITは、単に新しい機能を追加しただけではなく、そのアプリケーションの運用と開発に新たな可能性をもたらす重要な進歩と言えるでしょう。