2019年5月28日Q&Aフリーランス技術どうも、PHPerしんのすけでございやす先日、とある社長と呑んでおりましたら、PHPの話題に。「PHP7は高速化されたんですよー」と私が言うと、このように質問されました。え?JITが導入されたの?えっと...どうだったっけ?きちんとお答えできないということは、私が知ってるようでいて、何も知らないということ。PHPの高速化事情を整理JITの解説PHPはインタプリタ型のプログラミング言語です。アクセスが来たら、ソースコードを読み込んで、opcodeへ変換し、順番に逐次実行されます。実行終了したらコードは破棄されます。opcodeというのは中間コードの一種で、CPUやOSなどの実行環境に依存せず同一コードが生成されます。このopcodeを機械語に一行一行翻訳しながら実行を進めるというのが現在のPHPの実行方法でして、一般的にこういったインタプリタの処理速度は遅いです。そこでJITの登場です。JITとは、Just-In-Timeコンパイラのことで、最初のソースコードの読み込み時に、opcodeへ変換して、さらに機械語(ネイティブコード)まで一気に変換を済ませてしまう処理方法となります。高速化されますが、技術的に難しく大変な改修となります。JITの導入はPHP8からPHP5からPHP7となって、速度面が向上したのですが、PHP8になると上記のJITが導入されます。それにより更に大幅な速度面の向上が期待されます。このへんをごっちゃにしていたので、呑みの席でハッキリと答えられなかったのでした。Machine)というJIT導入されたPHP高速実行環境も存在します。PHP7以降は高速に動くようになったため、HHVMを利用するメリットはなくなり非推奨となっております。Requesthttps://www.phoronix.com/scan.php?page=article&item=php7-hhvm310-perf上記記事によると、PHP5.6とPHP7.0のスコア差で、2.4倍速くなってます。このPHP7にJITが導入されるとさらに数十倍の速度向上が見込まれると言われていますが、ほんの一例として以下のようなベンチマーク検証があります。(2015年の投稿ですので、あくまで参考程度に。現在のPHPは、データ分析や機械学習、3DCG映像レンダリングの分野においてpythonに引けをとってますが、JITが導入されてからはPHPもこういった分野にもどんどん進出していくことが期待できます。ちなみに、リレーショナルDBとつないでゴニョゴニョする限りは、ディスク読み書き速度がボトルネックになるので現状のPHPでも全然問題ないです。上に挙げたようなCPUをフル回転させる系の仕事で、その本領発揮となります。PHP7が高速になった理由やっと本題なのですが、JITをまだ入れていないとしたら「じゃあPHP7はなんで速くなったの?」という質問に答えていきたいと思います。...と思いましたがコチラに詳しく解説が載っていました。7のパフォーマンスが高い理由https://codezine.jp/article/detail/8492ヤフー株式会社には、技術や制作の分野において専門性に優れたエキスパート人財を「黒帯」に認定し、その活動を手厚く支援する黒帯制度があります。「ある分野に突出した知識とスキルを持っているその分野の第一人者」が黒帯として認定され、褒賞金と活動予算が付...すごく簡素にまとめると、こんなところです。変数の管理方法を変更。メモリアクセス効率化。内部で文字列参照は実体までポインタ3回たどってたけど、ポインタ2回で済むようにした。このチューニングによってパフォーマンスが大幅改善した。連想配列(ハッシュテーブル)も変更これまでは、要素追加するたび、メモリ領域を動的確保してリストチェーンで繋いで、辿っていた。PHP7からは実体データを連続して領域確保するように。関数の引数の処理これまで、関数がどういった引数を取るのかを理解するために、文字列解析を行っていてそれがまぁまぁの負荷となっていた。関数を呼ぶたびに、その引数仕様を解析するのでオーバーヘッドが発生する。PHP7からは、この処理をC言語でおなじみの「マクロ関数」で代用できるようにした。まとめPHP8からJIT搭載して爆速化PHP7が高速化した理由は、全体的に機構を変えて無駄を排除する形に最適化したから以上です。腰痛持ちプログラマーが「京都チャリティファンラン」に参加してハーフ完走してきましたしんのすけWeb系のエンジニアをやっております、しんのすけでございやす。なにかしらwebサービスをどんどん作って「発信する習慣」をつけたいと思いブログ始めました。副業について聞かれたので答えたアレコレわたし、定時で帰ります。