2013-04-03 83 views
1

我有一個jQuery自動填充字段,當用戶開始在字段中輸入城市名稱時,查找城市名稱和相應的ZIP(美國郵政編碼)。jQuery自動完成:預緩存查詢以提高性能?

MySQL數據庫包含大約44,000行美國郵政編碼。查詢本身在選擇所有城市名稱和郵政編碼時可以快速運行(0.0002秒)。

會不會有任何好處,以「預緩存」所有的結果(SELECT place_namepostal_code FROM postal_codes WHERE country_code =「美國」),以便自動完成功能的負荷快速地爲用戶?

編輯:整個JSON列表是600KB和負荷在2-3秒的瀏覽器(根據谷歌瀏覽器控制檯)

目前代碼:

<script type="text/javascript"> 
$(function() { 

$('#from_country').change(function(){ 
    var val = this.value; 
    $("#from_zip").autocomplete({ 
    source: "json-list-live-production.php?country=" + val, 
    minLength: 4, 
    }); 
}).change() 


$('#del_country').change(function(){ 
    var val = this.value; 
    $("#del_zip").autocomplete({ 
    source: "json-list-live-production.php?country=" + val, 
    minLength: 4, 
    }); 
}).change() 


}); 
</script> 

<input type="text" class="input_text" name="from_zip" id="from_zip" /> 

<input type="text" name="del_zip" id="del_zip" /> 
+0

你可以預緩解它,但你必須與帶寬相抗衡。完整名單將是相當大的。 'preaching'就像你所說的那樣,只有當它更快地將整個列表傳送給客戶端時纔有意義,而不是僅僅根據需要進行查找。如果用戶必須等待10秒才能下載整個列表,那比沒有緩存更糟糕。 (也就是說,除非你的列表很小,否則它可能沒有意義) – barryhunter

+0

看看['jQuery Autocomplete的遠程緩存演示'](http://jqueryui.com/autocomplete/#remote-with-cache) – Dom

回答

0

它看起來像使用GeoNames的。 org webservice + jQuery自動完成查找ZIP /郵政編碼是最快的方法。

$("#from_zip").autocomplete({ 
    source: function(request, response) { 
    $.ajax({ 
     url: "http://ws.geonames.org/postalCodeSearchJSON", 
     dataType: "jsonp", 
     data: { 
     featureClass: "P", 
     style: "full", 
     maxRows: 50, 
     placename_startsWith: request.term, 
     country: "US" 
     }, 
     success: function(data) { 
     response($.map(data.postalCodes, function(item) { 
      return { 
      label: item.placeName + (item.adminCode1 ? ", " + item.adminCode1 : "") + " (" + item.postalCode + ")", 
      value: item.postalCode 
      } 
     })); 
     } 
    }); 
    }, 
    minLength: 2, 
    messages: { 
     noResults: null, 
     results: function() {} 
    }, 

});