ソリッドシード株式会社

PHP8に追加されたJITとは?

2020年12月15日

PHPのメジャーバージョンが2020年11月26日にリリースされました。
今回のメジャーバージョンの大きな変化はJIT(ジット)というコンパイルの仕組みを導入し実行速度がされました。
ちょうど12月12日にPHPカンファレンスのオンライン開催があり、PHP8に追加されたJITについて解説してくれたセッションを聞きましたので紹介します。

JITとは?

JITはJust-In-Timeの略でプログラムの実行時にソースコードをネイティブコードへコンパイルを行います。
これをメモリに保持しておき、同じリクエストが来た場合にコンパイル済みのを実行して処理を高速化します。
PHP7まではソースコードを逐次解釈しながら実行するインタプリタで動作しているためオーバーヘッドがあります。
キャッシュなどを利用してインタプリタの欠点を補って速度を改善していましたが、これ以上のパフォーマンス向上は限界に到達したとPHP言語開発者が考え導入に至ったようです。

どのくらいパフォーマンス改善される?

環境により左右されますが、PHP8の公式ドキュメントを見ると約1.5倍~3倍のパフォーマンス向上がされるようです。
ただし、PHP単体での実行速度なのでWebアプリケーションのような環境だと改善効果は無いようです。
おそらく、バッチ処理などで効果が発揮されると思います。

どうしたら使用できる?

現在はPHP8をインストールしてもデフォルトで無効に設定されているので、php.iniに下記を記述して有効にする必要があります。

zend_extension = opcache
opcache.enable = 1
opcache.jit = on
opcache.jit_buffer_size = 128M

ただし、JITを有効にしただけでは単純に早くなるわけではないようです。
「opcache.jit」の設定を現状のプログラムに適した設定が必要になります。
「opcache.jit」は公式ドキュメントによると4通りの指定方法が可能で、整数値を指定する方法だと細かく設定ができます。
他にもJITを設定するオプションが追加されているので色々と検証してパフォーマンス改善する必要があります。

今後に期待!

JITは導入されたばかりで使用するには検討は必要ですが、うまく活用すればWebアプリケーション以外の機械学習などの開発でPHPも選択肢に入る可能性が出てきました。
PHP-MLという機械学習ライブラリがあるので、WordPressやEC-CUBEなどのPHPで開発されているCMSに導入されたら面白そうです。

投稿者:Saito