2015-11-05 58 views
0

我有這樣的文本輸入,它會對用戶輸入的每個按鍵執行搜索。由於搜索功能需要一點時間才能執行,用戶輸入卡住直到完成執行。以不同的方式運行JavaScript功能

<input type="text" id="suggestion" onkeyup="search();"/> 

我們可以讓這個搜索函數執行並讓用戶在文本字段中輸入。就像讓後臺運行搜索一樣。

ps。我不想使用延遲功能要等到用戶完成並調用搜索()

+2

嘗試Debouncing:https://davidwalsh.name/javascript-debounce-function –

+0

你在哪裏輸出你的結果? – smcjones

+0

我正在搜索約3000行以查找一些文本細節。如果有什麼與我的搜索條件相匹配的話,一個簡單的UI更改就會完成。這是主意。 –

回答

1

也許不是讓它每次運行設置使用

window.somevar = true; 

然後檢查是否變量是一個全球性的開關在再次搜索之前設置。一旦最初的搜索是完全然後顯示你的結果和取消全局變量

delete window.somevar; 

這樣的功能,「運行」每次擊鍵,但不鎖定輸入。

2

JavaScript運行在單個線程上 - 因此,當搜索功能運行時,它也會阻止UI呈現並響應您。您應該儘可能避免在瀏覽器上執行超過16ms的操作,您可以閱讀更多關於here的原因。

不管怎麼說,目前對於這2級主要的解決方案:

  • 它移動到服務器端。你在JavaScript中運行的搜索邏輯是什麼?它應該真正運行在客戶端而不是服務器端?
  • 在另一個線程上執行它。你熟悉WebWorkers嗎?這是一個更高級的話題,但通常它允許你在另一個線程上執行代碼。這在目前的瀏覽器中還是相當新穎的,但你至少應該熟悉它。

祝你好運。

相關問題