我有一些处理不一定是cpu密集型的,但是会产生很多临时对象,导致动画等过程中垃圾收集器出现干扰。
将临时对象创建过程卸载到Web工作者是否有助于缓解这种情况?换句话说 - GC打嗝是否会被隔离到Web工作线程并且不会影响我的主线程,或者GC是否会影响两个线程?
答案 0 :(得分:6)
ECMAScript规范没有指定任何表单内存管理,垃圾收集仅在非规范部分中引用。
同样,除了wrt之外,web worker规范并没有多说垃圾收集。一些物体必须存活多久。
所以这是特定于实现的行为。即使实现实现每个工作者GC并避免在一般情况下的共享开销,它们仍可能由于内存压力而触发所有工作程序的全局集合,尤其是在内存受限的系统上。
也就是说,与工人相比,你更有可能实现一些GC隔离。但是你必须注意避免工作者和主线程之间的消息传递开销,因为序列化消息(对于结构化克隆算法)会产生额外的垃圾。使用transferables或共享内存缓冲区可以避免这种情况。