【问题标题】:jQuery UI - speeding up AutocompletejQuery UI - 加速自动完成
【发布时间】:2011-08-14 19:29:47
【问题描述】:

我的自动完成功能运行良好,但我正在努力想办法让它更快。这是我的 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 由于城市和国家/地区变化不大(通常),因此只有一个包含所有值的平面文件会更快吗?

或者有没有其他方法可以更快地自动完成?

谢谢。

【问题讨论】:

    标签: php mysql jquery-ui autocomplete


    【解决方案1】:
    1. 自动完成假定如果您返回它,它就是一个有效的答案。所以:没有

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

    但实际上,因为您(可能)正在为您的术语搜索(相对)较小的集合,所以无论如何它都会非常快。

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

    附带说明:查看mysql_escape_string() 是否使用$country 和$term。否则,您可以向SQL Injection attacks 开放。

    【讨论】:

    • 谢谢。我确实尝试了一个基本的缓存,它确实提高了速度,但我想我希望有更多类似谷歌的速度(对于一个小网站来说可能是不切实际的)。至于转义输入,我所在的框架会自动执行此操作。为了简单起见,我只是在问题中使用未转义的字符串。再次感谢!
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多