如何实现Web Worker的递归函数?

时间:2014-02-17 14:11:44

标签: javascript recursion web-worker

这是一个设置:

  1. 要在递归函数中处理的大数据数组。
  2. 一个递归函数本身,它作为Web Worker运行以避免堆栈大小限制。
  3. 结果处理器,在递归函数之后调用,达到了“递归结束”状态。
  4. 我已经检查了web worker specs,但是对于一个简单的问题,它们有点难以理解和简单回答。

    我不明白的是

    1. 如何将数据传递给函数(在web worker中)
    2. 如何从功能中获取结果并知道何时完成
    3. 为什么我必须在单独的JS文件中定义worker

1 个答案:

答案 0 :(得分:1)

正如Bergi所提到的,您使用事件将数据传入和传出Web工作者。

关于#3 - 有一个“内联工作者”的概念,你在其中创建一个blob对象,然后从中创建一个url对象。类似的东西:

var blobURL = URL.createObjectURL( new Blob([ '(',
    function(){
        self.addEventListener('message', function (e){
            // Do stuff with array here
        }.toString(),
    ')()' ], { type: 'application/javascript' } ) ),

worker = new Worker( blobURL );

worker.postMessage(/* big array */);

您可以在此处找到有关内联工作人员的一些信息:

http://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers

我把这个小提琴与一个内联的web worker和一个(简单的)递归函数放在一起:http://jsfiddle.net/tQcuy/