我有一個名稱查找框,通過您的典型ajax請求操作。下面是每次按下字母時都會觸發的Javascript的一般流程:停止請求服務器端
- 如果ajax請求已打開,則中止它。
- 如果超時已經創建,請將其銷燬。
- 設置新的超時運行以下在半秒:通過AJAX
- 發送字符串「nameLookup.php」
- 等待迴應
- 顯示效果
的問題是,nameLookup .php是非常重要的資源。在某些情況下,多達10,000個名字正在從SQL數據庫中提取,解密並與字符串進行比較。在正常情況下,請求可能需要5到60秒才能返回。
我完全明白,當您在客戶端中止請求時,服務器仍在處理事件併發回結果。只是客戶端知道忽略響應。但是服務器在處理所有這些請求時變得如此懸而未決。
所以,如果你這樣做:
- 請求1個
- 中止請求1
- 請求2
- 中止請求2
- 要求3
- 等待請求響應3
服務器甚至沒有在請求3上工作,直到它完成1和2 ...或者它只是在請求1和2上工作,以致請求3需要額外的很長時間。
我需要知道如何告訴服務器停止對請求1和2的工作,所以我可以騰出資源,以便在要求工作3
我使用Javascript &的jQuery在客戶端。 PHP/Apache和SQL在服務器端。
你試過緩存結果嗎?我個人建議安裝和使用memcached。添加一個類,你可以在1個月或1周後取決於你的需要 –
也可以過期結果,看看下面的帖子http://stackoverflow.com/questions/13886501/ajax-abort-is-not-aborting -on-the-server-only-the-the-client –
我同意你只是有一個架構問題的其他意見。被查詢數據的基數是多少(即緩存是否合理)。什麼是數據的大小?它是否適合特里結構或類似的搜索樹,使查找效率更高? –