在性能優化或需要高精度計時的場景下,PHP 提供了一個非常實用的函數—— hrtime() 。這個函數可以精確到納秒級別,為我們提供了一個強大的工具來測量代碼的運行時間。本文將介紹hrtime()的用法、返回值格式、常見場景以及完整示例,幫助新手快速掌握這個函數。
hrtime()是從PHP 7.3 開始引入的一個函數,它用於獲取高精度的時間戳。它的全稱是“High Resolution Time”,用於替代精度較低的microtime()函數。
array hrtime(bool $as_number = false)
$as_number :如果為true ,則返回一個表示納秒數的整數;如果為false (默認),則返回一個數組,包含兩個元素:秒和納秒。
$start = hrtime();
// 執行某段耗時的代碼
usleep(500000); // 模擬執行時間
$end = hrtime($start);
echo "耗時:{$end[0]} 秒 {$end[1]} 納秒";
在這個例子中:
$start是起始時間
$end是從$start到當前的時間間隔
$end[0]表示間隔的秒數
$end[1]表示剩餘的納秒數
$start = hrtime(true);
// 執行一些代碼
usleep(100000); // 100 毫秒
$end = hrtime(true);
$elapsed = $end - $start;
echo "耗時(納秒):$elapsed";
這種寫法特別適合用來進行精確的性能分析。
你可以用hrtime()來比較不同實現方案的性能。例如:
function method1() {
$sum = 0;
for ($i = 0; $i < 10000; $i++) {
$sum += $i;
}
return $sum;
}
$start = hrtime(true);
method1();
$end = hrtime(true);
echo "method1 執行時間(納秒):" . ($end - $start);
你可以將請求處理的時間記錄到日誌中:
$requestStart = hrtime(true);
// 處理請求邏輯
file_get_contents("https://gitbox.net/api/test");
$requestEnd = hrtime(true);
$durationMs = ($requestEnd - $requestStart) / 1e6;
error_log("请求处理耗時:{$durationMs} 毫秒");
在自己的PHP 小工具或框架中,你可以用hrtime()自定義一個簡單的基準測試工具:
function benchmark(callable $func) {
$start = hrtime(true);
$func();
$end = hrtime(true);
return ($end - $start) / 1e6; // 轉為毫秒
}
$time = benchmark(function () {
file_get_contents("https://gitbox.net/resource/data.json");
});
echo "函数耗時:{$time} 毫秒";
hrtime()精度高,但也意味著更適用於短時間操作的測量。
如果你使用的是Windows 系統,確保你的PHP 版本在7.3 或以上,否則hrtime()不可用。
返回的納秒值非常大,如果你需要以毫秒或秒為單位,請記得做相應轉換。
hrtime()是PHP 提供的一個高精度時間函數,非常適合用在性能分析、精度要求高的場合。無論是數組形式還是整數納秒形式,都可以靈活地應用於各種業務需求。對於新手來說,掌握它只需了解其基本用法和返回值結構,配合示例即可快速上手。嘗試在自己的項目中使用它,你會發現性能分析從未如此簡單。