我们目前正在通过mySQL运行ajax自动补全脚本,如下所示:
<?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文件时,我们打开它,它包含的所有内容都是匹配我们搜索的内容的数组,所以他们没有将所有数据都存储在其中。
谢谢
发布于 2011-07-12 16:41:27
如果你想让你的自动补全更快,你可以做一些事情:
1)考虑是否需要数据库查询(如果您从不或很少需要更改自动补全的数据,则答案是否定的;如果数据是动态的,如朋友列表,答案是肯定的)
2)将覆盖索引放在要进行搜索的表/列上
3)在浏览器中缓存你的结果,避免调用太多
4)永远不要执行select *查询!您将浪费大量时间来检索您可能不会使用的数据!只需选择您需要的字段!
5)在对id进行查找时,不要像这样使用: use =it快得多
发布于 2011-07-12 16:34:14
如果您使用是internet explorer,它不知道内容类型为application/json的资源。这背后的原因是,Internet Explorer无法将application/json模拟类型与安装在客户端上的应用程序相关联。
在您的例子中,您可以将内容类型设置为text/json,或者我想只设置为application/json。
更新:
你也可以使用this,这里的答案建议使用application/json而不是application/json;charset=UTF-8
发布于 2011-07-12 18:06:57
where a = 5 and b = 6),那么还要创建复合索引。这样查询速度通常会更快。yourHTMLelement.innerHTML = ajaxResponseData;。这样,浏览器将不需要解析JSON和构造HTML DOM。这意味着数据表示将更快。https://stackoverflow.com/questions/6661420
复制相似问题