簡體   English   中英

為什么我的Ajax請求明顯慢於普通瀏覽器請求?

[英]Why is my Ajax request significantly slower than a normal browser request?

我為朋友創建了一個網站。 因為他希望音樂播放器繼續通過頁面加載播放音樂,所以我決定通過ajax(由jQuery推動)將內容加載到頁面中。 它工作正常,當沒有javascript時,它很好地回退,后退/前進按鈕工作得很好,但它在服務器上的速度非常慢。

幾點:

  1. 初始頁面加載相當快。 Chrome開發者控制台告訴我“index.php”在大約2.5秒內加載。 我設置它,以便查詢字符串參數指示加載哪個頁面,並且這個時間幀對於它們都是近似准確的。 對於主頁,加載了8.4KB的數據。

  2. 當我通過ajax請求加載內容時,無論下載的數據大小如何,大約需要20秒。 以這種方式加載的最小數據量大約為500字節。 這里顯然存在不匹配。

所以Chrome告訴我,花費的絕大部分時間都是“等待”,這意味着服務器正在處理請求。 所以,這只能意味着,我想,我的代碼需要花費很長時間,或者服務器上發生了一些麻煩。 我不認為這是我的代碼,因為它相當小:

$file = "";
if (isset($_GET['page'])) {
    $file = $_GET['page'];
} else if (isset($_POST['page'])) {
    $file = $_POST['page'];
} else {
    $file = "home";
}

$file = 'content/' . $file . '.php';

if (file_exists($file)) {
    include_once($file);
} else {
    include_once('content/404.php');
}

這是在content_loader.php文件中,我的javascript(在這種情況下)發送GET請求以及“page”參數。 返回HTML標記並將其放入頁面上的DIV中。

我正在使用jQuery .get()簡寫函數,所以我不認為我可能會弄亂任何東西,我相信這不是一個Javascript問題,因為延遲是在等待來自服務器的數據。 而且,即使數據非常小,也需要大約20秒。

我目前認為這是服務器的問題,但我不明白為什么通過javascript發出的請求比通過瀏覽器傳統方式的請求慢得多。 另外注意,一些內容頁面確實連接到MySQL數據庫,但有些頁面卻沒有。 頁面需要處理的內容或它包含的數據量似乎並不重要,大約需要20秒。

我很茫然......有沒有人知道任何可以解釋這一點的事情? 另外,如果這不是這個問題的正確位置,我會道歉,其他場地似乎也不適合這個問題。

正如我在評論中提到的,確定的可能性是反向DNS查找。 我以前遇到過這個問題,我敢打賭這是你請求緩慢的原因。 在常規apache和vhost配置以及.htaccess中都需要注意某些Apache配置指令。 以下是一些希望有用的鏈接:

http://www.tablix.org/~avian/blog/archives/2011/04/reverse_dns_lookups_and_apache/

http://betabug.ch/blogs/ch-athens/933

要查找更多資源,只需谷歌“apache slow reverse dns”。

一個很小的解釋

在反向DNS查找中,嘗試將IP地址解析為主機名。 大多數情況下,使用Apache,SSH和MySQL等服務這是不必要的,這是一個壞主意,因為它只會減慢請求/連接速度。 最好查找不同服務的配置設置,如果不需要則禁用反向DNS查找。

在Apache中,某些配置設置會導致反向查找。 HostnameLookups和允許/拒絕規則指定域而不是IP地址。 有關詳細信息,請參閱上面的鏈接。

正如您在評論中所建議的那樣,PHP腳本在最終運行后會快速執行。 花在等待Apache的時間 - 最有可能進行反向DNS查找和失敗。 您知道問題不在於您的代碼,而在於請求中涉及的其他服務。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM