我们目前正在通过mySQL运行ajax auto complete脚本,如下:
<?php
$q = strtolower($_GET['term']);
if (!$q) return;
$q = noescape($q);
if (is_numeric($q)){
$q = mysql_query("SELECT * FROM `blah` WHERE `id` LIKE '" . $q . "%' DESC LIMIT 10");
}else{
$q = mysql_query("SELECT * FROM `blah` WHERE `name` LIKE '" . $q . "%' DESC LIMIT 10");
}
$json = array();
while ($r = mysql_fetch_array($q)){
$json[] = array(
"v" => $r['v'],
"p" => $r['p'],
"s" => $r['s'],
"l" => $r['v'] . ', ' . $r['s'] . ' (' . $r['p'] . ')'
);
}
echo json_encode($json);
?>
我们希望更快地进行搜索,因此无需调用数据库并减慢速度。
我正在寻找其他人自动完成,并且在进行搜索时 - 他们的ajax正在调用“search.ds?query = blah”文件 - 这是什么?我们怎样才能快速模仿这个东西?
当下载提示的.ds文件时,我们打开它,它包含的是一个与我们的搜索匹配的数组,因此它们不会存储所有数据。
谢谢
答案 0 :(得分:6)
如果您希望更快地完成自动填充功能,可以执行以下操作:
1)考虑您是否需要数据库查询(如果您从未或很少需要更改自动填充的数据,则答案为否,如果数据是动态的,则表示您的朋友列表是
2)在您正在进行搜索的表/列上放置覆盖索引
3)将结果缓存在浏览器中以避免拨打过多电话
4)永远不要做一个select *查询!!!你浪费了很多时间来检索你可能不使用的数据!只需选择你需要的字段!
5)当你对id进行查找时,不要像你那样使用LIKE:use =它的速度要快得多
答案 1 :(得分:1)
如果您使用的是Internet Explorer,则它不知道内容类型为application/json
的资源。
这背后的原因是Internet Explorer无法将application/json
Mime-Type与客户端上安装的应用程序相关联。
根据您的情况,您可以将内容类型设置为text/json
,或者仅设置为application/json
。
更新:
您还可以参考this,此处答案建议使用application/json
而不是application/json;charset=UTF-8
答案 2 :(得分:1)
where a = 5 and b = 6
),那么也要创建复合索引。这样查询通常运行得更快。yourHTMLelement.innerHTML = ajaxResponseData;
。这样浏览器就不需要解析JSON并构造HTML DOM。这意味着数据表示将更快。