Javascript WebWorkers可以用来计算很长页面上的词频吗?
我正在编写一个基于浏览器的(Javascript和jQuery)语言分析工具,它从HTML中提取文本,然后提取语言单位,如句子、单词等 要导入文本,PHP后端会捕获给定的URL并清理生成的HTML。然后将HTML插入界面中的Javascript WebWorkers可以用来计算很长页面上的词频吗?,javascript,frequency,web-worker,Javascript,Frequency,Web Worker,我正在编写一个基于浏览器的(Javascript和jQuery)语言分析工具,它从HTML中提取文本,然后提取语言单位,如句子、单词等 要导入文本,PHP后端会捕获给定的URL并清理生成的HTML。然后将HTML插入界面中的div#container,如下所示: 当源HTML页面很长时,我遇到了一些困难。在接口的DOM中读取和插入这样一个页面似乎不会引起问题(尽管需要一段时间) 但是,如果页面很长,则在spidered内容上运行词频算法的速度非常慢。比如说,如果这一页接近10万字,它几乎会让事
div#container
,如下所示:
当源HTML页面很长时,我遇到了一些困难。在接口的DOM
中读取和插入这样一个页面似乎不会引起问题(尽管需要一段时间)
但是,如果页面很长,则在spidered内容上运行词频算法的速度非常慢。比如说,如果这一页接近10万字,它几乎会让事情陷入停顿
因此,我看到了一些选择:
在我尝试这一点之前,我希望我能从其他可能曾经与网络工作者共事过的人那里得到一次精神检查。首先,我想知道有效地分割
div#container
的内容是否会成为一个问题——我想这将涉及到对div#container
Web workers下的DOM树的某种遍历,这肯定是一个可行的选择,但折衷的办法是,你不能保证跨浏览器的兼容性。将内容分成若干块并利用setTimeout,看看这是否会有所不同,这可能是值得的。它将防止浏览器锁定,并防止出现任何长时间运行的脚本警告。尼古拉斯·扎卡斯不久前写了一篇关于这类事情的博客:
他建议的方法是:
function chunk(array, process, context){
var items = array.concat(); //clone the array
setTimeout(function(){
var item = items.shift();
process.call(context, item);
if (items.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100);
}
就我个人而言,我不认为100毫秒的延迟是必要的;我在其他地方看到过,您可以设置0毫秒的延迟,因为这足以中断长时间运行的脚本,并防止浏览器锁定
如果这不能改善情况,那么是的,网络工作者将是一条出路。谢谢Gary,我将尝试一下这种方法,看看效果如何。我会在这里回复。。。我想知道的一件事是
被调用方在这里的用法--
不是已经被弃用了吗?是的,我相信是的。您可以始终使用命名函数-sosetTimeout(function wrap(){…})在外部setTimeout
调用中调用code>,然后只调用wrap
而不是参数。被调用方