Javascript 使用PHPDB填充JQuery自动完成的最佳实践

Javascript 使用PHPDB填充JQuery自动完成的最佳实践,javascript,php,jquery,autocomplete,Javascript,Php,Jquery,Autocomplete,对于我的网站,我有一个美国城市的列表(大约30000个),我用它来自动完成一个自由形式的字段,这样用户就可以开始键入他们的城市,并从列表中选择它 我的问题是,将数据放入自动完成列表的最佳方式是什么 通过PHP读取数据库中的所有数据,并将其放入一个大型Javascript数组中 每次用户更新city字段时,都要调用DB,并搜索与其键入内容匹配的城市 我问这个是因为我想知道哪一个对性能最好。看起来#2会有很多DB调用,如果一次有100多人访问该站点,则会增加开销 #1可能不太好,因为数组中的3000

对于我的网站,我有一个美国城市的列表(大约30000个),我用它来自动完成一个自由形式的字段,这样用户就可以开始键入他们的城市,并从列表中选择它

我的问题是,将数据放入自动完成列表的最佳方式是什么

  • 通过PHP读取数据库中的所有数据,并将其放入一个大型Javascript数组中
  • 每次用户更新city字段时,都要调用DB,并搜索与其键入内容匹配的城市
  • 我问这个是因为我想知道哪一个对性能最好。看起来#2会有很多DB调用,如果一次有100多人访问该站点,则会增加开销

    #1可能不太好,因为数组中的30000个元素似乎很多

    我目前正在使用方法#1,它看起来还可以,但是当你查看源代码时,它确实看起来有点草率,它显示了30000行数组

    感谢您的任何建议/意见。

    我总是使用#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."%'";
    }
    
    //检索自动完成发送的搜索词
    $term=trim(strip_标签($_GET['term']);
    //准备查询
    
    对于($i=1;$i这两种解决方案在性能方面似乎都很昂贵。第一种解决方案可能会导致速度较慢的计算机出现问题,而第二种解决方案在服务器资源方面很昂贵


    我建议您使用像这样的全文搜索引擎,因为它支持复杂的搜索查询,而且由于缓存,它的速度确实比DB快得多。

    作为参考,最后我选择了#2。我对这两个引擎都进行了测试,并且在PC上的性能都很好,但在平板电脑或手机上进行测试时,第一个解决方案的自动通信速度非常慢第二种解决方案几乎是瞬间的。