如何将递归函数实现为 Web Worker? [英] How to implement a recursive function as a Web Worker?
问题描述
这是一个设置:
- 要在递归函数中处理的大数据数组.
- 递归函数本身,作为 Web Worker 运行以避免堆栈大小限制.
- 一个结果处理器,在递归函数达到递归结束"条件后调用.
我已经检查了 网络工作者规范,但它们有点不可读且混乱简单问题的简单回答.
I've checked web worker specs, but they are kinda unreadable and messy to give a simple answer on simple question.
我不明白的是
- 如何将数据传递给函数(在 Web Worker 中)
- 如何从函数中获取结果并知道它何时完成
- 为什么我必须在单独的 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屋!