我在寫一個Firefox擴展。我想在當前網頁搜索一組字詞,並計算每個字詞出現的次數。此活動僅在用戶提問時執行,但仍必須相當快地發生。最快的JavaScript頁面搜索
我目前使用的indexOf BODY標記的innerHTML元素,但我發現它太慢了以下方式重複運行:
function wordcount(doc, match)
{
var count = 0;
var pos = 0;
for(;;)
{
len=doc.indexOf(match, pos);
if(len == -1)
{
break;
}
pos = len + match.length;
count++;
}
return count;
}
var html = content.document.body.innerHTML.toLowerCase()
for(var i=0; i<keywords.length; i++)
{
var kw = keywords[i];
myDump(kw + ": " + wordcount(html, kw));
}
有了100個關鍵字,這大約需要10〜20秒運行。有一些範圍可以減少關鍵字的數量,但它仍然需要運行得更快。
有沒有更明顯的方法來做到這一點?什麼是最有效的方法?我有一些想法,但我不願沒有表現的一些想法,我可以期待每個代碼了:
- 導航DOM,而不是使用 的innerHTML。這可能會更快或更慢, ?這將有 的好處,只有搜索文本 內容。
- 通過 單詞循環遍歷文檔單詞,同時累計每個單詞的出現次數 。 用這種方法,我不得不多做一些解析HTML的工作。
編輯:原來,最慢的部分是寫入錯誤控制檯的myDump函數。咄!儘管如此,還是提出了一些有趣的更有效的替代方案,我打算使用這些替代方案。
如果關鍵字是「java」,文本是「javascript不是java」,您將得到2而不是預期的1. – some 2008-12-09 18:08:56