2016-04-24 53 views
0

我有一個從1服務器到另一個需要1秒的Web請求。我的瀏覽器中的相同請求幾乎沒有時間。我已經通過各種類似的問題望去,嘗試了所有的獻計獻策,我能找到包括從PHP內部的Web請求比較慢然後瀏覽器

  • 使用捲曲代替的file_get_contents
  • 嵌入自己的緊密連接頭在的file_get_contents
  • 使用谷歌的域名加速域查找
  • 用頭在目標服務器上,以避免永葆

這些都不取得對時間產生任何影響。下面是我嘗試這樣做的途徑:

$timeBefore = microtime(true); 


//Only one of these active at a time 
$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n'))); 
$output = file_get_contents($url,false,$context); 

//Or 
$context=stream_context_create(array('http' => array('header'=>"Host: www.google.com\r\n"))); 
$output = file_get_contents($url, false, $context); 

//Or 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 

$timeAfter = microtime(true); 

,然後記錄到文件中$timeAfter - $timeBefore。作爲結果,我總是在1.04202604294左右,而使用它的客戶端應用程序實際上會看到1秒的延遲。

作爲一個便箋,如果它是相關的,這裏的2臺服務器以下面的方式A到B進行交談,在B對A的回答期間,它將該URL發送回A,然後將所有這些併發送它的原始響應回到A.因此,在從源連接期間有一個連接返回到源。

下面是從curl_getinfo

content_type => text/html, 
http_code => 200, 
header_size => 219, 
request_size => 479, 
filetime => -1, 
ssl_verify_result => 0, 
redirect_count => 0, 
total_time => 1.04360199999999991860022419132292270660400390625, 
namelookup_time => 0.0001579999999999999915796522476085783637245185673236846923828125, 
connect_time => 0.0007219999999999999855393451042573360609821975231170654296875, 
pretransfer_time => 0.000772000000000000008264222639553508997778408229351043701171875, 
size_upload => 0, 
size_download => 1, 
speed_download => 0, 
speed_upload => 0, 
download_content_length => -1, 
upload_content_length => -1, 
starttransfer_time => 1.0435689999999999688640173189924098551273345947265625, 
redirect_time => 0, 
redirect_url => 

輸出所述調試該命令正在從2個服務器發送在相同的主機服務彼此,並且它們都沒有在負載下和其高品質的託管站點(液體web專用服務器)。響應和網址都很小

+0

查看'curl_getinfo',它應該表明查找的每個階段需要多長時間,例如,從DNS解析名稱需要多長時間,等等。這會告訴你哪些區域需要優化。 – halfer

+0

我已經在上面添加了輸出。 – user2292539

+0

嗯,'starttransfer_time'是大部分時間 - 你是否得到類似的其他服務器的慢時間?你的服務器和目標服務器在哪裏,它們有多遠? – halfer

回答

2

如果不運行完全相同的代碼並連接到瀏覽器中的同一站點,這幾乎不可能診斷。但總的來說,您的瀏覽器將會比CURL做更多的事情來協商與服務器的快速連接。這包括支持gzip的HTTP/2 &,兩者都使數據傳輸更快地從頭到尾。

+0

注意到這個請求中的有效負載是相當小的,並且兩臺機器之間的ping <1 ms,所以我覺得有更多的東西在進行優化,讓速度達到1秒。 – user2292539

0

我的經驗是,它需要時間來聯繫另一個頁面/服務器。
你可以做的是通過緩存x分鐘的數據來限制連接數。 (如果可能的話)

我使用put_file_contents()將數據緩存到txt文件,然後使用filemtime()查看文件的大小。
這樣你只需要用file_get_contents()從你的本地txt文件中讀取數據即可。

這會加快速度,但這也意味着您可能會顯示「過期」數據。

+1

這實際上是一個正在給出的命令,而不是一個顯示這樣的網頁,而不是一個選項。 – user2292539