當前位置: 首頁> 最新文章列表> hrtime() 在PHP 中的基本用法詳解

hrtime() 在PHP 中的基本用法詳解

gitbox 2025-06-03

在性能優化或需要高精度計時的場景下,PHP 提供了一個非常實用的函數—— hrtime() 。這個函數可以精確到納秒級別,為我們提供了一個強大的工具來測量代碼的運行時間。本文將介紹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";

這種寫法特別適合用來進行精確的性能分析。

三、典型應用場景

1. 精確測量函數執行時間

你可以用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);

2. 記錄日誌性能指標

你可以將請求處理的時間記錄到日誌中:

 $requestStart = hrtime(true);

// 處理請求邏輯
file_get_contents("https://gitbox.net/api/test");

$requestEnd = hrtime(true);
$durationMs = ($requestEnd - $requestStart) / 1e6;

error_log("请求处理耗時:{$durationMs} 毫秒");

3. 簡單性能測試框架中使用

在自己的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 提供的一個高精度時間函數,非常適合用在性能分析、精度要求高的場合。無論是數組形式還是整數納秒形式,都可以靈活地應用於各種業務需求。對於新手來說,掌握它只需了解其基本用法和返回值結構,配合示例即可快速上手。嘗試在自己的項目中使用它,你會發現性能分析從未如此簡單。