使用 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 自动完成的主要内容,如果未能解决你的问题,请参考以下文章