2012-01-13 128 views
0

我正在使用Mysql,javascrit和jquery作爲技術的php項目。使用ajax高效地訪問mysql數據庫(jQuery)

在那裏,我需要爲用戶提供自動建議選項,當他們在文本框中鍵入搜索產品的名稱。

當頁面加載時,當前實現從數據庫加載所有產品名稱作爲json字符串,然後根據輸入過濾字符串。當數據庫中有大量名稱(大約100,000個名稱)可用時,這是低效的。

我需要改變這個邏輯。我需要在用戶在文本框中輸入的同時,使用ajax請求從數據庫中檢索名稱。最初在建議列表中沒有可用的名字。然後,當用戶鍵入「A」時,應用程序應該向數據庫發送ajax請求,然後檢索包含「A」字母的所有名稱並將其作爲json字符串獲取。

但是,這種方法的問題是我們必須做大量的數據庫訪問,並獲得響應作爲鍵入的速度顯示爲建議。

是否有任何技術可以用來提高這個ajax數據庫的訪問效率。有人可以幫助我解決這個問題。

在此先感謝。

回答

2

JQueryUI網站提供了一些可能有助於自動完成的示例。其中一個例子是遠程緩存:

http://jqueryui.com/demos/autocomplete/#remote-with-cache

如果你點擊新窗口右上方的例子將在新窗口中打開,您可以在源代碼複製到自己的文件,並修改爲需要是。

+0

謝謝馬修我會經歷這個。 :) – Thilanka 2012-01-13 08:33:52

1

最佳答案取決於您的應用程序的用戶數量以及數據更改的頻率。我曾經做過的事情是加載完整的名稱列表並讓網頁瀏覽器緩存它:這樣服務器的加載很少,並且建議完成得非常快。它運作良好,因爲唯一用戶的數量很少,數據變化很少。

我在這裏有一個使用Prototype和CakePHP的例子:http://jonisalonen.com/2011/crazy-fast-ajax-search-suggest-in-cakephp-using-browser-cache/它不應該太難以適應jQuery。

+0

謝謝Joni。目前我所做的id是加載所有名稱並將其作爲json字符串發送。但是當我們在數據庫中有大量的名字時它會失敗。這與緩存它們的建議是否相同? – Thilanka 2012-01-13 08:38:19

+1

什麼失敗? 循環存儲在數組中的100,000個名字可能需要很長時間。您應該使用適合該任務的數據結構:http://stevehanov.ca/blog/index.php?id = 120 – Joni 2012-01-13 11:28:04

+0

感謝Joni。好吧,我會檢查。 :) – Thilanka 2012-01-16 04:05:40

1

我已經實現了這種事情幾次,我發現,除非你處理約1000個對象,然後每次通過AJAX打到數據庫是最好的選擇。

但是我肯定會推薦等到用戶暫時停止提取建議之前。我發現等待約500ms的暫停效果很好。換句話說,不是每按一次鍵都敲擊數據庫,而是使用JavaScript定時器在按下按鍵500ms後才提取建議,在此期間不提供其他按鍵。

+0

謝謝@philwilks但是,如果我們通過一個非常慢的網絡訪問服務器,每500毫秒查詢數據庫是不可能的,並不會立即返回結果。 – Thilanka 2012-01-13 08:59:32

+1

@ Thilanka不是每500毫秒。每次用戶在輸入中按下一個鍵等待500毫秒。如果在這段時間內沒有按下其他鍵,則檢索數據。如果按下另一個鍵,則重新啓動計時器。 – kapa 2012-01-13 12:25:14

+1

我承認我在數據庫上實現的所有網站都位於同一臺服務器上,或者位於同一機架上的服務器上,因此查詢速度非常快。 @bazmegakapa謝謝你澄清我在說什麼! – philwilks 2012-01-14 18:21:08