我正在測試一些PHP腳本的執行時間,其目的是爲了在我的網站上提供Web內容。測量爲Web內容提供服務的PHP腳本的執行時間
但是我得到的結果不一致。
測量執行時間並記錄到文本文件中。
其中一個腳本基本上從磁盤讀取JPEG圖像並將其提供給客戶端。
這裏是腳本的簡化版本與相關的代碼:擔任
<?php
// save initial time
$t1 = microtime(true);
// set header for a jpeg image
header('Content-Type: image/jpeg');
// read a file from the hard drive and send content
// (the real code serves every time a different image based on the request)
readfile('the_image.jpg');
// flush output buffer
flush();
ob_flush();
// save final time
$t2 = microtime(true);
// elapsed time in milliseconds
$te = round(($t2 - $t1) * 1000);
// write a line to the log file
$handle = fopen('log.txt', 'a');
fwrite($handle, $te . "\n");
fclose($handle);
圖像不同,每次。它們大小約爲100KB。
我從遠程位置連接到網站並加載一些圖像。
當我看到以毫秒爲單位的日誌文件的執行時間是這樣的
45
63
40
3
3
67
40
3
5
我期望(放可能我錯了,在這個)當PHP腳本將數據發送到客戶端執行等待,直到數據發送完畢。
因此,在上面的代碼中,$t2
是在圖像完全發送到客戶端時檢索的。
那麼,爲什麼有時候,圖像只需要3毫秒發送? 考慮到我在連接到服務器時使用的互聯網連接,3毫秒是不可能實現的。
PHP是否將所有數據立即發送到Web服務器(在我的情況下,它是nginx),然後後者花時間將數據發送到客戶端?
更新
這似乎這個問題是關係到nginx的做緩衝。
發生這種情況時nginx「儘可能快地從PHP輸出緩衝區」,然後將內容發送到客戶端。
這允許PHP實例更快關閉。
PHP腳本沒有看到將內容傳輸到客戶端所需的時間。
不幸的是,似乎沒有辦法禁用nginx緩衝。我發現了很多「食譜」,但沒有人可以使用。