【问题标题】:How to implement a recursive function as a Web Worker?如何将递归函数实现为 Web Worker?
【发布时间】:2014-02-17 14:11:44
【问题描述】:

这是一个设置:

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

我已经检查了web worker specs,但它们有点难以阅读和混乱,无法就简单问题给出简单的答案。

我不明白的是

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

【问题讨论】:

  • 通过调用函数将数据传递给函数。但是,将数据传递给 Web Worker 是通过向其发送事件来完成的。反过来也一样——你需要听一个事件,而不是接听电话结果。工作人员应该在不同的文件中,因为他们有完全独立的环境。

标签: javascript recursion web-worker


【解决方案1】:

正如 Bergi 所说,您使用事件将数据传入和传出您的网络工作者。

关于#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

我将这个小提琴与一个内联的网络工作者和一个(简单的)递归函数结合在一起:http://jsfiddle.net/tQcuy/

【讨论】:

  • 这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2017-11-13
  • 2021-06-27
  • 2017-11-26
相关资源
最近更新 更多