關於PHP7

目前一直使用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.其餘優化,例如,優化排序算法等。 

 

待完善~ 

相關文章
相關標籤/搜索