The Zend Engine is the open source scripting engine that interprets the PHP programming language.
複製代碼
Zend引擎是開源的解釋php語言的腳本引擎。php
Zend有兩部分組成,即編譯器和執行器。編譯器負責將PHP代碼編譯爲抽象語法樹,而後進一步編譯爲可執行的opcodes,這個過程至關於GCC的工做,編譯器是一個語言實現的基礎;執行器負責執行編譯器輸出的Opcodes,也就是執行PHP腳本中編寫的代碼邏輯。 Opcode是將PHP代碼編譯產生的Zend虛擬機可識別的指令,php7共有173個Opcode,定義在zend_vm_opcodes.h中,PHP中的全部語法實現都是由這些opcode組成的。html
Zend Engine最主要的特性就是把PHP的邊解釋邊執行的運行方式改成先進行預編譯(Compile),而後再執行(Execute)
複製代碼
見連接3(我沒看完,不太懂,仍是太年輕啊~~)。git
Opcode是一種PHP腳本編譯後的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執行代碼會通過以下4個步驟(確切的來講,應該是PHP的語言引擎Zend):github
1.Scanning(Lexing) ,將PHP代碼轉換爲語言片斷(Tokens)
2.Parsing, 將Tokens轉換成簡單而有意義的表達式
3.Compilation, 將表達式編譯成Opocdes
4.Execution, 順次執行Opcodes,每次一條,從而實現PHP腳本的功能。
複製代碼
如今有的Cache好比APC、Opcache(APC止步於PHP 5.4,Zend Opcache從PHP 5.5 開始集成,取代APC。),可使得PHP緩存住Opcodes,這樣,每次有請求來臨的時候,就不須要重複執行前面3步,從而能大幅的提升PHP的執行速度。 以下圖:數據庫
有一次線上發代碼了(修改了數據庫),可是數據庫裏面數據沒進來,很是詭異,懷疑是代碼沒有發成功,後來leader在羣裏對運維說Opcache(原理就是緩存Opcodes)沒有更新。。。小坑小坑緩存