首先聲明一下,這篇文章是我的原創,但是,這些數據不是我總結出來的,大家可以搜索下“百度工程師HDK”,這些數據是他提供的,我只是給一個總結,因為他那篇文章很長,我這里提煉了幾點要點。
要了解函數的性能,首先要知道函數的執行流程,它首先通過scanning被轉化為語言片段(tokens),然后通過parsing為簡單有意義的表達式,然后compile(編譯)為Opcode,最后execute(執行)。因為PHP本身是用C去實現的,因此最終調用的都是C的函數,即PHP就是一個用C開發出來的軟件。
在PHP中,用戶通過PHP實現的自定義函數和內置函數有完全不同的實現機制,Zend在執行的時候,如果發現調用的是內置函數,只是做一個轉發操作,內置函數在編譯后會展開成一個zif_xxx的函數,而對于內置函數的操作,zend實現的是淺拷貝,其效率和C差不多,非常給力。如果是用戶自定義的函數,則用戶函數的調用最終是解析一堆的opcode。用戶自定義空函數的執行速率大約是280w/s,即每秒可以執行二百八十萬次,而內置函數則達到了780w/s,差不多是用戶自定義函數的三倍。
不講這些原理性的東西了,下面說一些測試結果把,函數名的長度對性能是有一些影響的,下面是他給出的數據:
通過上表,我們發現一個長度為1的函數和長度為16的空函數調用,性能會差一倍,原因何在,就是因為函數名越長,查詢需要的時間就越多,因此,函數名還是盡量短一些。
這張圖片是用戶自定義的函數直接調用內置函數,只是單純的測試兩個函數的性能,很好理解把,不同類型的函數的執行效率差別很大的。
當然他本人還測試了一些PHP的一些函數的運行效率,我直接把這些東西過濾掉了,感覺并不特別有意義。
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答