使用 php 列表加速 jquery 自动完成

Posted

技术标签:

【中文标题】使用 php 列表加速 jquery 自动完成【英文标题】:Speeding up jquery autocomplete with php list 【发布时间】:2012-09-04 20:46:15 【问题描述】:

您好,我遇到了一个问题。我已经实现了 jquerys 著名的自动完成,我正在从数据库中创建一个列表(很长)以输出到自动完成字段中。但是在列表中找到正确的值需要很长时间。有谁知道我可以加快速度的方法???这是我的jQuery:

<script>
    $(function() function log( message ) $( "#destId" ).val( message );
        $( "#destinations" ).autocomplete(
            source: "destinos.php",
            minLength: 2,
            select: function( event, ui ) 
                log( ui.item ?
                    "" + ui.item.id :
                    "" + this.value );););
    </script>

这里是 destinos.php:

//connect to database
include 'php/dbconn.php';
$term = trim(strip_tags($_GET['term']));//retrieve the search term that autocomplete sends

$qstring = "SELECT Destination as value, DestinationId as id FROM DestinationId WHERE Destination LIKE '%".$term."%'";
//query the database for entries containing the term
    $result = mysql_query($qstring);
//loop through the retrieved values   
    while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
    
            $row['value']=htmlentities(stripslashes($row['value']));
            $row['id']=htmlentities(stripslashes($row['id']));
            $row_set[] = $row;//build an array
    
    echo json_encode($row_set);//format the array into json data

任何帮助将不胜感激!

【问题讨论】:

首先你应该将结果缓存在js中,其次你应该限制SQL查询以提高性能 限制可能不会那么加快查询速度,它会减少返回的数据,但不会减少需要完成的工作量。根据您拥有的记录数量,类似查询可能是个问题。 exit (json_encode($row_set)); - 不会对性能产生很大影响,但exit() 通常是 ajax 返回的好习惯,以确保您最终不会得到流氓换行或其他任何东西的预期字符串。 【参考方案1】:

您很可能需要加快数据库查询速度。你必须做几件事才能做到这一点。

    确保您的 Destination 字段上有索引。 除非绝对必须从字符串中间匹配,否则请从 LIKE 查询中删除前导 % 以启用索引。 MySQL 无法有效地使用带有前导通配符的索引。 如果您必须保留前导 %,则在您的 jQuery 中将 minLength 设置为 3。这将允许 MySQL 对模式使用优化算法。

来源:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

【讨论】:

【参考方案2】:

我将从数据库方面着手。

首先,您需要确保在Destination 上有一个索引。

其次,您应该考虑使用LIMIT,例如 10 或 20 行。在自动完成中,在大多数情况下,您不需要一次显示那么多结果。随着用户继续快速输入,匹配计数将减少。

第三,在查询$term变量之前,你应该使用正确的mysql转义。

其余的看起来很简单。

【讨论】:

谢谢你,这帮了很多忙……限制行确实加快了速度!

以上是关于使用 php 列表加速 jquery 自动完成的主要内容,如果未能解决你的问题,请参考以下文章

使用 php、mysql 和 jQuery 实现自动完成

jQuery UI - 加速自动完成

加速 jQuery AutoComplete(不可避免的长列表)

使用非常大的选择列表加速jqueryui自动完成组合框

jquery自动完成没有在下拉列表中显示结果,只有空白行

带有链接的 JQuery 自动完成