2014-09-01 19 views
3

我正在測試一些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緩衝。我發現了很多「食譜」,但沒有人可以使用。

回答

-1

您可以嘗試從命令行運行腳本以查看連接延遲是否是一個因素。我懷疑不是 - 這可能與加載服務器有關。如果磁盤或CPU在請求時被佔用,則會影響腳本的執行時間。

-1

簡而言之:flush();不等待客戶。

那只是時間,哪個PHP需要而不是網絡。

0
  1. 我其他的答案
  2. 有更多的緩存系統。你的硬盤,你的操作系統和PHP都有一個緩存系統,他們正在做他的工作來優化加載文件。 你只能看到PHP需要多長時間加載你的文件。

如果你想看看你的客戶端需要加載多長時間,那麼你必須使用JS。

不要忘了,你的瀏覽器也有一個緩存系統。您可以通過標題或其他網址將其禁用它

相關問題