我正在尝试使用webworker对来自画布的图像数据进行一些处理。解决方案,我知道,工作得很好,但是当我进行处理时仍然有一些明显的滞后(因为除了处理我必须从网络摄像头到画布绘制视频并且它开始滞后)。
所以我尝试使用webworker并且我异步完成了所有操作。唯一的问题是,当我使用JSON.stringify时,它需要比实际处理更长的时间。
我的问题:还有其他方法,如何快速通过worker.postMessage传递大量数据?是否有一些我不知道的解决方法?
小问题:网络工作者是什么?我发现工人真的没用,只传递字符串。
修改
可能重复:Pass large amounts of data between web worker and main thread
答案 0 :(得分:3)
所有内容都被复制到网络工作者,所以除非你的计算非常密集,否则我怀疑你会在那里看到很多收获。
WebWorkers适用于长期运行的计算密集型算法。明显的用例是:
由于数据是双向复制的,因此您必须小心您正在做的事情。 WebWorkers无法访问DOM,因此它们可能对您正在尝试的操作毫无用处。我不知道你的应用程序做了什么,但听起来不是很激烈。
还有Sharedworkers,可以由多个标签/窗口共享,这是在标签之间传递数据的一种非常好的方法。
修改强>
同时查看structured clone algorithm。对于许多事情来说,JSON似乎更有效,甚至可以复制ImageData(因此它不再仅仅支持字符串)。
对于不支持克隆算法的浏览器,我建议您考虑使用base64。它在存储二进制数据方面很不错,我认为它比JSON.stringify更快。您可能必须编写一些代码来处理它。