我爲一位朋友創建了一個網站。因爲他希望音樂播放器能夠通過頁面加載繼續播放音樂,所以我決定通過ajax(由jQuery提供便利)將內容加載到頁面中。它工作的很好,當沒有javascript時它會很好地回退,並且後退/前進按鈕工作得很好,但在服務器上速度非常慢。爲什麼我的Ajax請求比一般的瀏覽器請求慢得多?
有幾點:
初始頁面加載是相當快的。 Chrome開發者控制檯告訴我,「index.php」在大約2.5秒內加載。我已經設置了查詢字符串參數來指定加載哪個頁面,並且這個時間框架對於他們來說大致是準確的。對於主頁,加載了8.4KB的數據。
當我通過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請求與「頁」參數一起。 HTML標記被返回並放入頁面上的DIV中。
我正在使用jQuery .get()
速記功能,所以我不認爲我可能會搞砸那裏的任何東西,而且我相信它不是Javascript問題,因爲延遲是在等待來自服務器的數據。再次,即使數據非常小,大約需要20秒。
我目前認爲這是服務器的問題,但我不明白爲什麼通過JavaScript做出的請求比通過瀏覽器傳統方式做出的請求慢得多。作爲補充說明,一些內容頁面連接到MySQL數據庫,但有些則不。它似乎並不關乎頁面處理的內容或它包含的數據量,它需要20秒左右的時間。
我很茫然......有誰知道任何可能解釋這一點的東西?另外,我很抱歉,如果這不是這樣一個問題的正確位置,其他場所也不是特別適合這個問題。
基於我過去處理的類似問題,我立即想到了幾件事情。首先可能是反向DNS查詢問題。在反向DNS查找失敗後,它可能會超時。其他問題:你在使用MySQL嗎?你正在加載一個基於文件的會話嗎? –
建立了一個MySQL連接,儘管一些內容頁面根本不使用它。另外,我根本不使用會話。我想到了嘗試和執行我的PHP的時間,所以我非常簡單地在發生任何事情之前(包括與數據庫的連接)回覆出時間(),並且在所有事情完成之前,在它被髮送之前回到客戶端。輸出是相同的,所以我認爲這意味着我的腳本運行時間不到一秒。你能詳細談談反向DNS問題嗎?我不確定你在做什麼。 – user2276673
請參閱下面的答案。我剛加了一點解釋。 –