画布数据到web worker

时间:2012-12-05 22:03:11

标签: javascript html5 canvas web-worker

我正在尝试使用webworker对来自画布的图像数据进行一些处理。解决方案,我知道,工作得很好,但是当我进行处理时仍然有一些明显的滞后(因为除了处理我必须从网络摄像头到画布绘制视频并且它开始滞后)。

所以我尝试使用webworker并且我异步完成了所有操作。唯一的问题是,当我使用JSON.stringify时,它需要比实际处理更长的时间。

我的问题:还有其他方法,如何快速通过worker.postMessage传递大量数据?是否有一些我不知道的解决方法?

小问题:网络工作者是什么?我发现工人真的没用,只传递字符串。

修改

可能重复:Pass large amounts of data between web worker and main thread

1 个答案:

答案 0 :(得分:3)

所有内容都被复制到网络工作者,所以除非你的计算非常密集,否则我怀疑你会在那里看到很多收获。

WebWorkers适用于长期运行的计算密集型算法。明显的用例是:

  • 网络游戏中的AI
  • Raytracers
  • 对大型数据集进行压缩/解压缩
  • AJAX请求在显示之前需要大量处理
  • 其他复杂算法

由于数据是双向复制的,因此您必须小心您正在做的事情。 WebWorkers无法访问DOM,因此它们可能对您正在尝试的操作毫无用处。我不知道你的应用程序做了什么,但听起来不是很激烈。

还有Sharedworkers,可以由多个标签/窗口共享,这是在标签之间传递数据的一种非常好的方法。

修改

同时查看structured clone algorithm。对于许多事情来说,JSON似乎更有效,甚至可以复制ImageData(因此它不再仅仅支持字符串)。

对于不支持克隆算法的浏览器,我建议您考虑使用base64。它在存储二进制数据方面很不错,我认为它比JSON.stringify更快。您可能必须编写一些代码来处理它。