2010-04-09 47 views
2

嗨我正在爲我的公司使用jQuery的autocomplete建立一個內部應用程序,我發現它往往開始非常緩慢。我的假設是瓶頸可能會將其元素添加到DOM,因爲在第一次查詢後,它似乎要快得多。有誰知道在頁面加載時預加載這些元素的方法,而不是在用戶開始輸入時第一次加載這些元素?緩慢加載jQuery自動完成

+0

您使用哪種服務器端語言? – 2010-04-09 16:35:30

+0

PHP但這不是問題,它在第一次嘗試時總是比較慢。例如。如果我在第一個查詢中輸入「foobar」,並在下一個中輸入「random」,隨機結果將顯示更快(我檢查了MySQL查詢並打擾回到0.01ms) – 2010-04-09 19:07:52

回答

1

如果您不必使用ajax調用來檢索數據,並且您的自動完成列表不是太大,則可以從js對象數組中提供自動完成的數據。

讓我們假設你有這樣的數據(你早,你想/可以建立):

var data = [{"n":name, "p":pagename,"c":number_of_results},...]; 

然後自動完成呼叫看起來:

$("#autocomplete").autocomplete(data, { 
    matchContains: true, 
    formatItem: function(row, i, max) { 
     return row.n + " ("+row.c+")"; 
    }, 
    formatMatch: function(row, i, max) { 
     return row.n; 
    }, 
    formatResult: function(row) { 
     return row.n; 
    } 

}); 
$("#autocomplete").result(function(event, data, formatted) { 
    if(!data) { 
     alert("Please select an item"); 
    } else { 
     window.location.href = data.p; 
    } 
}); 

這將創建一個自動完成,將看起來像item name (number of results),並點擊一個項目,它會重定向到相應的項目頁面名稱。

我有大約1,000件商品,並且自動完成速度是即時的。

0

PHP/SQL上的服務器端速度很慢。

請勿使用PHP/SQL。我用C++編寫的自動完成,並使用哈希表進行查找。 查看實際成績here

這是Celeron-300電腦,FreeBSD,Apache/FastCGI。

而且,你看,在巨大的字典上運行得很快。10,000,000條記錄不是問題。

此外,支持優先級,動態轉換和其他功能。