[英]How to Speed Up Search Suggestions
我想提出像Google這樣的快速搜索建議。 我用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.';
}
我建議您進行配置,以了解您在哪里花費了最多的時間。 我喜歡看從Wireshark到目的地的數據包,盡管當有Firefox插件可以跟蹤您的請求時,這似乎有些過分。
但是,查看您的代碼,我想最有可能的是服務器端代碼,特別是WHERE x LIKE%y%子句。 大多數DB在使用左通配符時效果不佳,因為它們使用b樹作為索引,因此我將擺脫第一個通配符。 除此之外,根據過去的拼寫錯誤和更正內容,預先編譯建議列表。 如果執行此操作並正確索引了表,則您的請求可能會非常快。
谷歌的搜索結果會比您的搜索結果更快的原因很多。
從我頭頂上
他們將擁有某種具有索引和全文搜索的優化數據倉庫,而不是MySQL的免費版本
他們沒有一台服務器來滿足他們的請求,它們有一個CDN和服務器集群,而您會碰到離您最近的服務器以降低延遲
他們會緩存當前的趨勢查詢,因此不必在每次點擊時都進行查詢。
他們將在自己的專用服務器上運行,這些服務器什么也不做,但每天都會提供搜索結果,而不是上面有很多人的共享服務器
忘記嘗試匹配Google了。 找出搜索緩慢的地方並解決。 安裝firebug,然后查看服務器響應需要多長時間。 分析您的代碼以查看哪些部分運行緩慢。 多數情況下,表設計不良和服務器運行緩慢是造成這種情況的原因
您最有可能想要使用精英數據結構,例如二叉樹或trie,基數樹,patricia樹或crit-bit樹。 我自己做了一個卡丁車嘗試。 您可以在phpclasses.org上獲取它並搜索kart-trie。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.