php - jQuery UI - 加速自动完成

标签 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. 自动完成假设如果您返回它,它就是一个有效答案。所以:

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

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

从扩展的角度来看,将它们放在一个平面文件中或使用缓存。

作为旁注:查看 mysql_escape_string()使用 $country 和 $term。否则你会打开 SQL Injection attacks .

关于php - jQuery UI - 加速自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5820741/

相关文章:

php - 当字符串也是字符串变量时,如何为字符串中存在的变量赋值?

javascript - Mysql 服务器获取的数据

mysql - 如何将 .sql 文件导入 Postgres 数据库?

jquery - 使用 dropzones 重新排列页面上的元素?

javascript - dragstop 我做错了什么?

javascript - Jquery前后的时间常数

php - 将文件动态附加到 Contact Form 7 电子邮件

php - 如果一个为空,如何将变量分配给两个字符串之一?

mysql - 如何使用 SQLAlchemy 向 mysql 中的表或列添加注释?

php - 在 $_GET 中使用转义 & 符号的 htaccess 重写规则失败