我想像谷歌一样快速提出搜索建议。我尝试使用AJAX / jQuery,但速度非常慢。我也尝试使用XML而不是MySQL,但它也很慢。我怎样才能加快速度? 我的jquery代码是:
function lookup(inputString,fname,sbox,asbox) {
if(inputString.length == 0) {
// Hide the suggestion box.
$('#'+sbox).hide();
} else {
// post data to our php processing page and if there is a return greater than zero
// show the suggestions box
$.post(fname, {mysearchString: ""+inputString+""}, function(data){
if(data.length >0) {
$('#'+sbox).show();
$('#'+asbox).html(data);
}
});
}
}
和php代码是
查询:SELECT maincatid,category FROM maincategory WHERE category LIKE
'%$mysearchString%' LIMIT 10"
if($rs) {
while ($result = @mysql_fetch_object($rs))
{
echo '<li onClick="fill(\''.$result->maincatid.'\',\''.$result->category.'\');">'.str_ireplace($mysearchString,'<span style="background-color:#C1E0FF;">'.$mysearchString.'</span>',$result->category).'</li>';
$c++;
}
}
else {
echo 'ERROR: There was a problem with the query.';
}
}
} else {
}
} else {
echo 'Access denied.';
}
答案 0 :(得分:1)
我建议您查看您的最佳时间花在哪里。我喜欢观看从Wireshark到目的地的数据包,尽管当有适用于Firefox的插件可以追踪您的请求时,这似乎有些过分。
但是,看看你的代码,我会说很可能是服务器端代码,特别是WHERE x LIKE%y%子句。大多数数据库使用左通配符的效果不佳,因为它们使用b树作为索引,因此我将摆脱第一个通配符。除此之外,根据过去的拼写错误及其更正预编译一系列建议。如果您这样做并正确编制了表格索引,那么您的请求可能非常活泼。
答案 1 :(得分:0)
google的搜索结果有很多原因比你的更快。
脱离我的头顶,
他们会有一些带索引和全文搜索的优化数据仓库,而不是免费版的MySQL
他们没有一台服务器可以满足他们的请求,他们有一个CDN和服务器集群,你可以点击距离你最近的服务器以获得低延迟
他们已经缓存了当前的趋势查询,因此每次点击它们都不需要查找它。
他们将在他们自己的专用服务器上运行,这些服务器每天只为您的搜索结果提供服务,而不是与其他人群共享的共享服务器
忘记尝试匹配谷歌。找出你的搜索速度慢的地方并解决它。安装firebug并查看服务器响应的时间。分析您的代码以查看哪些部分很慢。大多数情况下,它是设计糟糕的表和速度慢的服务器
答案 2 :(得分:0)
您最有可能想要使用精英数据结构,如二叉树或特里,或基数树,或帕特里夏树或暴击树。我做了一个kart-trie的实现。你可以在phpclasses.org抓住它并搜索kart-trie。