2010-01-28 53 views
1

我正在使用JQuery插件(http://docs.jquery.com/Plugins/Autocomplete)向「城市」文本字段添加自動完成功能。該組件調用一個簡單地加載所有可能城市值(> 8000)的數組的ASP.NET頁面,然後迭代該數組返回那些以用戶迄今輸入的文本開頭的數組。將數據返回到客戶端自動完成查詢

事情是,它在實際使用中很慢。它滯後於用戶輸入的內容,大部分時間用戶可能不會注意到它在那裏。

所以,我的問題是,我該如何加快速度?

我曾經想過,將數據放入數據庫並且必須多次擊中數組纔是更好的選擇。其他人是否同意這種信息是硬編碼的,因爲它並不是一成不變的,需要全部關注回報速度?

如果是這樣,你會看什麼來提高性能的速度?我應該在應用程序啓動時緩存數據並從內存中訪問它嗎?我會更好,而不是使用多個數組,每個數組都包含以特定字母開頭的值,所以我可以直接轉到相關的數組,從而迭代一個更小的數組?或者我錯過了一個更明顯的方法來解決這個問題?

在此先感謝。

+0

數據來自哪裏?某種SQL服務器,另一個來源? – 2010-01-28 15:16:30

+0

你可以發佈你的代碼嗎?過濾8,000個字符串應該會立即回來,特別是如果它們位於內存列表或數組中。 – 2010-01-28 16:55:01

回答

1

您發佈的代碼看起來很正常,應該會很快返回。我的猜測是,你正在使用default "delay" value作爲400毫秒的插件。嘗試將其更改爲像100ms(甚至更低)之類的東西,看看它是否更好:

$('#textbox').autocomplete('your_url_here', { 
    delay: 100 
}); 
+0

這很可能是它。我沒有意識到這個參數。在本地測試它當然很好,並且很快。我還沒有能夠進行現場測試(稍後會做),並且不會將其標記爲正確,直到我可以確認它爲止。我最初注意到活動服務器和我的開發服務器之間的速度差異,這導致我相信這可能是一個代碼問題。稍後再測試並確認它是否修復它。再次感謝。 – BinarySolo 2010-01-29 09:47:00

+0

就是這樣。現在正在飛行。謝謝! – BinarySolo 2010-01-31 11:09:17

1

那麼你可能不想硬編碼任何數據,如果你可以避免它。將它放在數據庫中將使管理更改變得更容易。而且沒有理由每次都必須查詢數據庫。您可以將自己在內存中的sql數據緩存到多個列表中。這應該是相當迅速的,除非有某種額外的網絡延遲問題。您可能想要發佈一些代碼,以便人們可以提供更具體的指導。

0

感謝您的回覆。 (非常基本)代碼如下:

Dim q As String = LCase(Server.UrlDecode(Request.QueryString("q"))) 
Dim arrCities() As String = {"Abano Terme", "Abbadia Cerreto", ... "Zungri"} 
For Each s As String In arrCities 
    If s.ToLower.StartsWith(q) Then 
     Response.Write(s & vbCrLf) 
    End If 
Next 

第2行基本上是一個巨大的數組,聲明在代碼中是正確的。這並不漂亮,但數據是非易失性的,所以我認爲我可以避開它,並且我認爲它比從數據庫直接提取更快。但是,如果你可以提供一些具體的建議,也許有一些緩存的SQL?

+0

您應該編輯您的問題並在其中添加附加信息,而不是發佈新答案。 – 2010-01-28 21:37:21

+0

對不起,新手錯誤。完全沒有發現我的問題上的編輯鏈接。 – BinarySolo 2010-01-29 09:47:27

相關問題