Web Workers——如果对象是按值传递的,内存使用量会翻倍吗?
Web Workers - If objects are passed by value is the memory usage doubled
假设我正在做一些图像处理,即我使用。todataurl()从html5画布获得像素数据。
如果输出的数组占用了100MB的内存,然后我把它传递给一个webworker做一些计算,因为对象是按值传递给worker的,我现在有这个数组的两个副本,从而占用200MB的内存吗?
要避免内存使用翻倍,请使用可转移的基于对象的API。MDN文档提到这是一个零复制操作,所以你可以预期它不会使你的内存使用量加倍。
因为听起来你已经在处理一个数组,这可能是一个微不足道的改变,将数组传递给postMessage
两次:
var theOutputtedArray = ...;
worker.postMessage(theOutputtedArray, theOutputtedArray);
这篇来自Chrome开发者(5年前)的旧博客文章讨论了它与常规消息传递的区别,并给出了一些演示代码。
这篇稍微更新的博客文章来自RedHat开发人员,对性能进行了非常深入的比较。在主线程和工作线程之间传递大对象的三种不同方式的稳定性。
快乐阅读。
相关文章:
- 重复应用 d3 转换导致的内存泄漏
- 如何显示在给定极限内存在的所有素数
- IE7中的blockUI插件内存泄漏25kb
- Javascript闭包-如何防止内存泄漏
- 基于订阅的nosql内存数据库
- 显示:阻止/无html元素,css.not从内存中释放
- jQuery Draggable:内存泄漏
- 元素过多的HTML内存使用情况
- 如何使用Javascript在FireFox中将html从内存动态加载到iframe中
- "检测到可能的EventEmitter内存泄漏”;使用Gulp+Watchify+Factor捆绑包
- Javascript图像数组预加载速度和从内存中删除
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- VBA加载网页并提取内存中的数据
- 是内存泄漏
- 将处理程序留在img.onload上是内存泄漏
- new Datamap() 在调用之间保持内存的共享状态
- 具有并发sse连接的node.js内存泄漏
- HTML5内存游戏-JavaScript功能
- 监控Node.js进程以获得每个进程的最大内存使用量
- Web Workers——如果对象是按值传递的,内存使用量会翻倍吗?