zend-opcache - php 的 opcache 和最近的 php jit 有什麼不同?
我想大声告诉你
我想大声告诉你 2017-06-26 10:49:19
0
2
1258

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

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

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

我想大声告诉你
我想大声告诉你

全部回覆(2)
黄舟

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

三叔

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

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

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板