javascript - Web Worker 如何实现递归函数?

标签 javascript recursion web-worker

这是一个设置:

  1. 要在递归函数中处理的大数据数组。
  2. 递归函数本身,作为 Web Worker 运行以避免堆栈大小限制。
  3. 结果处理器,在递归函数达到其“递归结束”条件后调用。

我检查过 web worker specs , 但对于简单的问题给出简单的答案,它们有点难以理解和困惑。

我不明白是什么

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

最佳答案

正如 Bergi 所提到的,您可以使用事件将数据传入和传出 Web Worker。

关于 #3 - 有一个“内联 worker ”的概念,您可以在其中创建一个 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

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

关于javascript - Web Worker 如何实现递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831298/

相关文章:

javascript - JS/jQuery 获取 HTTPRequest 请求头?

java - 将年份与数据库中日期的年份部分进行比较

JavaScript 模块模式函数或 jQuery 委托(delegate)

recursion - 为什么 ocaml 需要 "let"和 "let rec"?

c# - 在 x 轴的 2D 点中定位基因图的非递归方法。后代如下

ruby-on-rails - 延迟作业错误 : there is already one or more instance(s) of the program running

javascript - 创建一个接受用户输入并在页面加载时将其添加到句子中的表单

PHP:从递归函数返回一个数组

javascript - 将 Web Worker 与 Sencha Touch 2 结合使用

javascript - 如何使用并行网络 worker ?