Web Workers——如果对象是按值传递的,内存使用量会翻倍吗?

Web Workers - If objects are passed by value is the memory usage doubled

本文关键字:使用量 内存 如果 Workers 对象 Web 按值传递      更新时间:2023-09-26

假设我正在做一些图像处理,即我使用。todataurl()从html5画布获得像素数据。

如果输出的数组占用了100MB的内存,然后我把它传递给一个webworker做一些计算,因为对象是按值传递给worker的,我现在有这个数组的两个副本,从而占用200MB的内存吗?

要避免内存使用翻倍,请使用可转移的基于对象的API。MDN文档提到这是一个零复制操作,所以你可以预期它不会使你的内存使用量加倍。

因为听起来你已经在处理一个数组,这可能是一个微不足道的改变,将数组传递给postMessage两次:

var theOutputtedArray = ...;
worker.postMessage(theOutputtedArray, theOutputtedArray);

这篇来自Chrome开发者(5年前)的旧博客文章讨论了它与常规消息传递的区别,并给出了一些演示代码。

这篇稍微更新的博客文章来自RedHat开发人员,对性能进行了非常深入的比较。在主线程和工作线程之间传递大对象的三种不同方式的稳定性。

快乐阅读。