2017-03-13 55 views
2

對於我的網站,我有一個美國城市列表(約30,000),我使用它來自動填充自由格式字段,因此用戶可以開始鍵入他們的城市,並從列表中選擇它。使用PHP DB填充JQuery自動完成的最佳實踐

我的問題是,將數據放入自動完成列表的最佳方式是什麼?

  1. 通過PHP讀取數據庫中的所有數據,並將其放入一個大的Javascript數組中。
  2. 每當用戶更新城市字段並搜索與他們正在輸入內容相匹配的城市時撥打電話。

我問這是因爲我想知道哪一個對性能最好。看起來#2會有很多數據庫調用,並且如果有100多人同時點擊該網站,則會產生開銷。

#1可能不是很好,因爲數組中的30,000個元素看起來很多。

我目前使用的方法#1,它似乎確定,但它確實看起來有點馬虎當您查看源代碼,它顯示數組30,000行。

任何建議/輸入表示讚賞。

+0

作爲參考,最終我去了#2。我測試了兩者,並且每臺PC的性能都很好,但是當從平板電腦或手機進行測試時,第一種解決方案的自動完成速度非常慢。第二種解決方案几乎是瞬間的。 –

回答

1

這兩個解決方案似乎是性能昂貴。第一個可能會導致計算機速度慢的問題,而第二個對於服務器資源來說是昂貴的。

我建議你使用像Sphinx這樣的全文搜索引擎,因爲它支持複雜的搜索查詢,並且由於緩存而實際上比DB快得多。

1

我總是用#2

這是我的PHP可以是什麼樣子:

PHP

//retrieve the search term that autocomplete sends 
$term = trim(strip_tags($_GET['term'])); 

//Prepare Query 
for($i=1; $i<=strlen($term); $i++) { 
    $test_term = substr($term, 0, $i); 
    $query = "SELECT DISTINCT column as value FROM table WHERE column LIKE '".$test_term."%'"; 
}