首頁  >  問答  >  主體

zend-opcache - php 的 opcache 和最近的 php jit 有什麼不同?

opcache 是用來快取 zend 引擎編譯產生的 opcode,下次就不需要編譯。
最近聽說了 php jit,看了一下 jit 的概念,描述是這樣的:

JIT編譯(just-in-time compilation),即時編譯,狹義指某段程式碼即將第一次被執行時進行編譯,而後則不用編譯直接執行,它為動態編譯的一種特例。

那 php 的 jit 和 opcache 有什麼差別呢?

我想大声告诉你我想大声告诉你2645 天前1188

全部回覆(2)我來回復

  • 黄舟

    黄舟2017-06-26 10:51:19

    原始碼(人認識)->字節碼(解釋器認識)->機器碼(硬體認識)
    來看下PHP的執行流程,假設有個a.php文件,不啟用opacache的流程如下:
    a.php->經過zend編譯->opcode->PHP解釋器->機器碼
    啟用opacache的流程如下
    a.php->查找opacache緩存,如果沒有則進行zend編譯為opcode並快取->opacode->PHP解釋器->機器碼
    啟用jit的流程如下
    a.php->編譯->機器碼
    以後都只執行機器碼,不編譯,效率上高了很多

    回覆
    0
  • 三叔

    三叔2017-06-26 10:51:19

    JIT這個概念其實是來自Java,在Java裡,JIT編譯器是將字節碼編譯為機器碼的過程。

    如果把PHP和Java做對應,那麼PHP編譯成OpCode的過程就是Java編譯為字節碼的過程,而引申起來,PHP的JIT,也就是把OpCode編譯為機器碼的過程。

    更簡單的說,PHP程式編譯成OpCode,而後交給PHP解釋器取執行,這樣的過程還是一個解釋執行的過程。而如果透過JIT編譯為機器碼,那麼程式的執行效率是可以大幅提高的。

    目前熱門的幾個腳本語言,都已經擁有了自己的JIT,唯獨PHP這方面還有欠缺。所以,有所期待吧,期待PHP 8

    回覆
    0
  • 取消回覆