目前一直使用php7也看了許多文檔視頻等,整理一下相關細節(僅爲記錄~),對於PHP7性能,以下圖所示。php
* 在wordpress3.0.1中 php7比php5.6性能提高約3倍左右算法
新特性數組
一.變量類型性能優化
php7版本函數參數和返回值增長了類型的限定,設定類型變量主要對密集計算增長了性能。php7
function test(int $a,string $b,array $c) : int { //code }
二.錯誤異常wordpress
php版本<7 程序出錯後程序會拋出致命錯誤而且終止程序異常,php7可使用try..catch捕獲錯誤。函數
try { //error code }catch(EngineException $e){ echo $e->getMessage(); }
三.性能優化性能
1.zval使用了棧內存優化
在zend引擎中,常常要建立一個變量,底層就是一個zval指針。以前的版本都是從MAKE_STD_ZVAL動態的從堆上分配一個zval的內存,php7能夠直接使用棧內存。spa
php5 zval *val; MAKE_STD_ZVAL(val); php7 zval val;
這樣作節省了大量的內存分配和內存管理等操做,從而性能獲得很大的提高。
2.zend_string 存儲hash值,array查詢不須要重複計算hash
php7中爲字符串單獨的建立了新類型叫作zend_string,除了char*指針和長度外,還增長了一個hash值,進而對於數組查找不須要反覆計算hash值。在php7版本之前zend引擎會有大量的時間用於計算hash值,對於實際php程序運行起來以後,大部分key是保持不變的,對於php7引擎存儲了hash值,避免大量的hash計算。
strut _zend_string{ zend_refcounted gc; zend_ulong h;//存儲hash值 site_t len; char val[1] }
這樣作主要優化了數組的鍵值查找,實際上在php底層不少地方用到了hash,例如類的屬性,類方法函數等
3.hashtable桶內直接存數據,減小了內存申請次數,提高了cache命中率和內存的訪問速度。
=>
4.zend_parse_parameters 改成宏實現,性能提高5%
5.增長了4種opcode,call_user_function, is_int/string/array, strlen, defined 4個函數變爲opcode指令,速度更快。
6.其餘優化,例如,優化排序算法等。
待完善~