国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

百度工程師講PH P函數的實現原理及性能分析(二)

2019-11-02 15:13:47
字體:
來源:轉載
供稿:網友

   這篇文章主要介紹了百度工程師講PHP函數的實現原理及性能分析(二),本文講解了類方法、性能對比、內置函數和用戶函數性能對比等內容,需要的朋友可以參考下

  類方法

  類方法其執行原理和用戶函數是相同的,也是翻譯成opcodes順次調用。類的實現,zend用一個數據結構zend_class_entry來實現,里面保存了類相關的一些基本信息。這個entry是在php編譯的時候就已經處理完成。

  在 zend_function的common中,有一個成員叫做scope,其指向的就是當前方法對應類的zend_class

琪琪布電影網[www.aikan.tv/special/qiqibudianyingwang/]
_entry。關于php中面向對象的實現,這里就不在做更詳細的介紹,今后將專門寫一篇文章來詳述php中面向對象的實現原理。就函數這一塊來說,method實現原理和 function完全相同,理論上其性能也差不多,后面我們將做詳細的性能對比。

  性能對比

  函數名長度對性能的影響

  》》測試方法 對名字長度為1、2、4、8、16的函數進行比較,測試比較它們每秒可執行次數,確定函數名長度對性能的影 響

  》》測試結果如下圖

02.jpg

  》》結果分析

  從圖上可以看出,函數名的長度對性能還是會有一定的影響。一個長度為1的函數和長度為16的 空函數調用 ,其性能差了1倍。分析一下源碼不難找到原因,如前面敘述所說,函數調用的時候zend會先在一個全局的funtion_table中通過函數名查詢相關信息,function_table是一個哈希表。必然的,名字越長查詢所需要的時間就越多。 因此,在實際編寫程序的時候,對多次調用的函數,名字建議不要太長。

  雖然函數名長度對性能有一定影響,但具體有多大呢?這個問題應該還是需要結合實際情況來考慮,如果一個函數本身比較復雜的話,那么對整體的性能影響并不大。一個建議是對于那些會調用很多次,本身功能又比較簡單的函數,可以適當取一些言簡意賅的名字。

  函數個數對性能的影響

  》》測試方法

  在以下三種環境下進行函數調用測試,分析結果:1.程序僅包含1個函數 2.程序包含100個函數 3.程序包含1000個函數。測試這三種情況下每秒所能調用的函數次數

  》》測試結果如下圖

03.jpg

  》》結果分析

  從測試結果可以看出,這三種情況下性能幾乎相同,函數個數增加時性能下降微乎其微,可以忽略。從實現原理分析,幾種實現下唯一的區別在于函數獲取的部分。如前文所述,所有的函數都放在一個hash表中,在不同個數下查找效率都應該還是接近于O(1),所以性能差距不大。

  不同類型函數調用消耗

  》》測試方法

  選取用戶函數、類方法、靜態方法、內置函數各一種,函數本身不做任何事情,直接返回,主要測試空函數調用的消耗。測試結果為每秒可執行次數 測試中為去除其他影響,所有函數名字長度相同

  》》測試結果如下圖

  》》結果分析

  通過測試結果可以看到,對于用戶自己編寫的php函數,不管是哪種類型,其效率是差不多的,均在280w/s左右。如我們預期,即使是空調,內置函數其效率也要高很多,達到780w/s,是前者是3倍。可見,內置函數調用的開銷還是遠低于用戶函數。從前面原理分析可知主要差距在于用戶函數調用時初始化符號表、接收參數等操作。

  內置函數和用戶函數性能對比

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白水县| 巴东县| 乳山市| 游戏| 澜沧| 巴林左旗| 海宁市| 商都县| 富裕县| 乌兰浩特市| 新晃| 大名县| 广灵县| 迁西县| 高碑店市| 古田县| 磐安县| 荥经县| 宁乡县| 河间市| 都江堰市| 武功县| 曲周县| 平果县| 崇文区| 新干县| 德令哈市| 诸城市| 英山县| 嘉峪关市| 郎溪县| 阜阳市| 宁德市| 桐城市| 穆棱市| 林甸县| 饶平县| 务川| 沂水县| 凤台县| 子长县|