如何将递归函数实现为 Web Worker? [英] How to implement a recursive function as a Web Worker?

查看:43
本文介绍了如何将递归函数实现为 Web Worker?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个设置:

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

我已经检查了 网络工作者规范,但它们有点不可读且混乱简单问题的简单回答.

I've checked web worker specs, but they are kinda unreadable and messy to give a simple answer on simple question.

我不明白的是

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

推荐答案

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

As mentioned by Bergi, you pass data to and from your web workers using events.

关于#3 - 有一个内联工人"的概念,您可以在其中创建一个 blob 对象,然后从中创建一个 url 对象.类似的东西:

Regarding #3 - There's a concept of "inlined workers", where you create a blob object, and then from that, create a url object. Something like:

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 */);

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

You can find some information regarding inline workers here:

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

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

I threw together this fiddle with an inlined web worker and a (simple) recursive function: http://jsfiddle.net/tQcuy/

这篇关于如何将递归函数实现为 Web Worker?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆