jQuery UI - 加速自动完成

时间:2011-04-28 15:04:59

标签: php mysql jquery-ui autocomplete

我已经完成了自动完成工作,但我正试图找到让它更快的方法。这是我的HTML:

Country: <select name='country' id='country' onchange="renewAutocomplete();">
             <option value='US'>USA</option>
             <option value='UK'>United Kingdom</option>
         </select><br/>
City: <input type='text' name='city' id='city' />
<script>
   function renewAutocomplete() {
      $( "#city" ).autocomplete({
            source: "searchCities/" + $('#country').val(),
            minLength: 2
        });
   }
</script>

PHP / mySQL查询非常基本:

$term = $_GET['term'];
$sql = "SELECT city FROM cities WHERE country_code = '{$country}' AND city LIKE '{$term}%'";

当然,这意味着每次按键都会有一个新查询。它有助于添加一些缓存,但它仍然没有我想象的那么快。

问题1 我的第一个想法是在选择国家/地区时,在一个数据库调用中获取所有城市。有没有办法将所有国家/地区城市的返回JSON分配到自动完成可以使用的变量中?我的初始测试只会在您输入时弹出所有城市:

      $.get("searchCities/" + $('#country').val(), function(data) {
                    $( "#city" ).autocomplete({
                        source: data,
                        minLength: 2
                    });
        });
PHP: 
    $sql = "SELECT city FROM cities WHERE country_code = '{$country}'";

问题2 由于城市和国家不会发生很大变化(通常),只是拥有一个包含所有值的平面文件会更快吗?

或者还有其他方法可以加快自动填充速度吗?

感谢。

1 个答案:

答案 0 :(得分:3)

  1. 自动填充功能假定如果您将其返回,则它是一个有效的答案。所以:没有

  2. 是的,从平面文件中提取比在每次按键击中数据库要快得多。但是,如果你在数据库前面放了一些缓存(memcache),它可能和平面文件一样快。

  3. 但实际上,因为你(很可能)为你的学期搜索(相对)小的一组,所以无论如何它都会非常快。

    从缩放角度来看,将它们粘贴在平面文件中或使用缓存。

    作为旁注:请查看mysql_escape_string()使用$ country和$ term。否则,您可以SQL Injection attacks开放。