首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

效能實測:PHP 內建函數 vs 自訂函數,原生永遠最快?

     編輯:PHP 相關知識

效能實測:PHP 內建函數 vs 自訂函數,原生永遠最快?

閱讀 Kohana 原始碼發現其 Arr::range() 並未使用 PHP 內建 range(),而是自行實作迴圈。這觸發了對「盡可能使用原生函數」這句常識的驗證:原生函數真的比自訂函數快嗎?

測試環境

  • PHP 7.4+ (CLI)
  • 對比函數:內建 range($start, $end, $step) vs 自訂 _range($step, $max)
  • 測試資料量:0 ~ 1,000,000,步長 2、3、1
  • 指標:執行時間、峰值記憶體

自訂實作

function _range($step = 10, $max = 100) {
    if ($step < 1) return [];
    $arr = [];
    for ($i = $step; $i <= $max; $i += $step) {
        $arr[$i] = $i;
    }
    return $arr;
}

測試結果

參數內建 range() 時間內建 range() 記憶體自訂 _range() 時間自訂 _range() 記憶體
range(0, 1000000, 3)5.15 ms27.55 MB0.019 ms0.12 MB
range(0, 1000000, 2)7.48 ms40.27 MB0.018 ms0.12 MB
range(0, 1000, 1)0.082 ms0.16 MB0.026 ms0.12 MB

分析

  • 大量資料時,自訂函數大幅優於內建:內建 range() 需建立完整連續陣列佔用大量記憶體;自訂版本僅存鍵值對,記憶體幾乎恆定。
  • 小資料量差異微小:百萬級以下場景兩者皆可接受。
  • 功能差異:內建 range() 支援字元序列(range('a','z')),自訂版本需額外擴展。

結論

「盡量用原生函數」並非絕對真理。針對大量數值序列生成,自訂迴圈在記憶體與速度上優勢明顯。Kohana 團隊深諳內核實作細節,才做出此優化。開發者應根據實際場景基準測試,而非盲目迷信。

測試代碼已上傳 GitHub Gist,歡迎自行驗證。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved