謝謝您的閱讀。PHP:爲什麼我的防洪腳本滯後?
我有一個輸入字段,它將XMLHttpRequest中的內容發送到一個php腳本。該腳本使用字段中的POST數據查詢數據庫並返回結果。
因爲使用onkeyup調用XMLHttpRequest,所以輸入冗長的值會在短時間內發送多個調用。爲了解決這個問題,我編寫了一些創建時間戳的代碼,將它加載到會話中,休眠,然後重新檢查時間戳。如果時間戳增加,則表示後續調用已完成,腳本應中止。否則,腳本執行。這是代碼。
$micro = microtime(true);
$_SESSION['micro'] = $micro;
usleep(500000); // half a second
if ($micro < floatval($_SESSION['micro']))
{
// later call has been made, abort
echo 'abort';
exit;
}
else
{
// okay to execute
}
該代碼似乎按預期在第一時間工作。如果我在輸入字段中添加或刪除一個或兩個字符,結果會很快顯示。
但是,如果我儘可能快地輸入12個字符,則會出現很大的延遲,有時會延長2到3秒。
我在localhost上工作,所以沒有連接問題。該查詢也非常小,從一個特定的行中抓取一個包含單個單詞的列。
我也設置XMLHttpRequest是異步的,所以也應該沒問題。
xmlhttp.open("POST","/test/",true);
如果我刪除防洪代碼,在現場返回結果立刻打字 - 不管多少,以及如何快速I型。
這幾乎就像usleep()不斷堆疊本身或某物。
我自己想出了這個代碼,最好我可以在我的水平上做。不知道爲什麼它不像預期的那樣。
非常感謝幫助,謝謝!
你試圖把'usleep(500000);'參加別的嗎? – Gogol
爲什麼不檢查在客戶端腳本中鍵入的字符串的長度? – Khaleel
你並沒有用php來完成延遲,因爲它是服務器端腳本。您需要延遲通過JavaScript(或您使用的任何客戶端語言)實際發送到腳本 –