PHP7 從發佈到如今已經有快三年的時間了,如今已經發展到 PHP7.2.9 版本了。它的發佈給 PHP 帶來了很大的性能提高,這主要是得益於 PHP 對 Zend 引擎的深度優化,同時還下降了 PHP 對系統的資源佔用。數組
主要的變化有如下幾點:函數
在PHP以前的版本中,PHP代碼在語法解析階段直接生成了 ZendVM
指令,也就是在 zend_language_parser.y
中直接生成 opline
指令,這使得編譯器與執行器耦合在一塊兒。性能
PHP7 中增長了抽象語法樹,首先是將PHP代碼解析生成抽象語法樹,而後將抽象語法樹編譯爲 ZendVM
指令。抽象語法樹的加入使得 PHP 的編譯器與執行器很好地隔離開,編譯器不須要關心指令的生成規則,而後執行器根據本身的規則將抽象語法樹編譯爲對應的指令,執行器一樣不須要關心該指令的語法規則是什麼樣子的。優化
PHP7 中使用 Native TLS
(線程局部存儲)來保存線程的資源池,簡單地講就是經過 __thread
標識一個全局變量,這樣這個全局變量就是線程獨享的了,不一樣線程的修改不會相互影響。線程
PHP7中能夠指定函數參數及返回值的類型。code
PHP7 將引用計數轉移到了具體的 value
中,這樣更合理。除此以外,zval
結構的大小也從 24byte 少到了 16byte,這是 PHP7 可以下降系統資源佔用的一個優化點所在。內存
PHP5.x 中不少操做會直接拋出 error 錯誤,PHP7 中將多數錯誤改成了異常拋出,這樣一來就能夠經過 try catch
捕捉到。資源
PHP7 中 HashTable
有很是大的變化,HashTable
結構的大小從 72byte 減少到了 56byte,同時,數組元素 Bucket
結構也從 72byte 減少到了 32byte。編譯器
在 PHP7 中再也不採用傳參的方式,而是將 execute_data
、opline
經過寄存器來進行存儲,避免了傳參致使的頻繁出入棧操做,同時,寄存器相比內存的訪問速度更快。編譯
PHP5.x 經過 zend_parse_parameters()
解析函數的參數,PHP7 提供了另一種方式,同時保留了原來的方式,可是新的解析方式速度更快。