4

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

所以我尝试使用 webworker,我做的一切都是异步的。唯一的问题是当我使用 JSON.stringify 时,它需要比实际处理更长的时间。

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

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

编辑:

可能重复:在 web worker 和主线程之间传递大量数据

4

1 回答 1

3

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

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

  • 网页游戏中的人工智能
  • 光线追踪器
  • 大型数据集的压缩/解压
  • 在显示之前需要大量处理的 AJAX 请求
  • 其他复杂算法

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

还有 Sharedworkers,它可以由多个选项卡/窗口共享,这是在选项卡之间传递数据的一种非常好的方式。

编辑:

还要研究结构化克隆算法。JSON 在很多事情上似乎更有效,甚至可以复制 ImageData(因此它不再只支持字符串)。

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

于 2012-12-05T22:14:35.023 回答