2017-07-09 39 views
1

我只是創建具有搜索功能,並在每個搜索我有一個數據庫查詢帶回建議的網頁。但是,當我開火這onkeyup fucntion太多次(我的意思是10-20次),因爲它試圖一次又一次地嘗試,經過太多的射擊網站包裝並給我一個錯誤頁面,standart谷歌差事錯誤頁面(不PHP錯誤頁面,解釋什麼是錯誤的)1分鐘後,一切正常。你有什麼主意嗎?PHP搜索funtion讓我的網站崩潰

謝謝。

+2

在keyup上盲目地觸發事件是個壞習慣。如果你真的想要一個關鍵字搜索,那麼你應該在javascript中添加一個0.5秒的超時,並在下一個關鍵事件中「覆蓋它」(清除它並設置另一個)。如果新的ajax請求啓動,也可以中止前一個ajax請求。 – apokryfos

+0

@apokryfos謝謝你的回答。我明白你在說什麼,我現在就試一試。我會讓你知道結果。 –

回答

0

@apokryfos是在他的評論完全正確。

onkeyup事件處理程序以某種方式啓動MySQL查詢:可能通過從用戶的瀏覽器的AJAX風格的請求到PHP頁面。然後,在MyQL查詢有機會完成並將其結果集返回給瀏覽器之前,下一個事件處理程序啓動另一個查詢。

一旦MySQL查詢已開始(在通常的PHP實現),它運行到完成。即使用戶在查詢過程中關閉瀏覽器到php的連接,情況也是如此。如果您的用戶能夠快速啓動許多查詢 - 通過快速輸入 - 這些查詢將堆積在MySQL服務器中,直到資源耗盡。

這裏有一個可能的惡性循環。用戶認爲「也許我的請求沒有通過」並再次點擊,開始另一個請求。

jQueryUI的自動完成構件具有delay參數來控制的請求被髮送頻率。 http://api.jqueryui.com/autocomplete/#option-delay根據我的經驗,一到兩秒的設置會產生高質量的用戶體驗。您可能會發現使用這種小部件很有幫助;其他人已經調試了用於延遲的javascript超時的複雜性。