84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
opcache 是用來快取 zend 引擎編譯產生的 opcode,下次就不需要編譯。 最近聽說了 php jit,看了一下 jit 的概念,描述是這樣的:
JIT編譯(just-in-time compilation),即時編譯,狹義指某段程式碼即將第一次被執行時進行編譯,而後則不用編譯直接執行,它為動態編譯的一種特例。
那 php 的 jit 和 opcache 有什麼差別呢?
原始碼(人認識)->字節碼(解釋器認識)->機器碼(硬體認識)來看下PHP的執行流程,假設有個a.php文件,不啟用opacache的流程如下:a.php->經過zend編譯->opcode->PHP解釋器->機器碼啟用opacache的流程如下a.php->查找opacache緩存,如果沒有則進行zend編譯為opcode並快取->opacode->PHP解釋器->機器碼啟用jit的流程如下a.php->編譯->機器碼以後都只執行機器碼,不編譯,效率上高了很多
原始碼(人認識)->字節碼(解釋器認識)->機器碼(硬體認識)
a.php->經過zend編譯->opcode->PHP解釋器->機器碼
a.php->查找opacache緩存,如果沒有則進行zend編譯為opcode並快取->opacode->PHP解釋器->機器碼
a.php->編譯->機器碼
JIT這個概念其實是來自Java,在Java裡,JIT編譯器是將字節碼編譯為機器碼的過程。
如果把PHP和Java做對應,那麼PHP編譯成OpCode的過程就是Java編譯為字節碼的過程,而引申起來,PHP的JIT,也就是把OpCode編譯為機器碼的過程。
更簡單的說,PHP程式編譯成OpCode,而後交給PHP解釋器取執行,這樣的過程還是一個解釋執行的過程。而如果透過JIT編譯為機器碼,那麼程式的執行效率是可以大幅提高的。
目前熱門的幾個腳本語言,都已經擁有了自己的JIT,唯獨PHP這方面還有欠缺。所以,有所期待吧,期待PHP 8
原始碼(人認識)->字節碼(解釋器認識)->機器碼(硬體認識)
來看下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