我有一些处理不一定是CPU密集型的,但是会创建许多临时对象,这会导致在动画等过程中出现令人讨厌的Garbage Collector打h。

将临时对象创建过程的工作分担给Web工作人员是否可以减轻这种情况?换句话说-GC打ic会被隔离到Web Worker线程中并且不影响我的主线程吗,或者GC是否会影响两个线程?

最佳答案

ECMAScript规范未指定任何形式的内存管理,垃圾回收仅在非规范性部分中提及。

同样,除了wrt之外,网络 worker 规范对垃圾回收的处理方式也没有太多说。某些物体必须存活多长时间。

因此,这是特定于实现的行为。即使实现实现了每个 worker 的GC,并在通常情况下避免了共享的开销,由于内存压力,它们可能仍会触发所有工作程序的全局集合,尤其是在内存受限的系统上。

话虽如此,与工作人员相比,有工作机会实现GC隔离的可能性更大。但是您必须注意避免在工作程序和主线程之间的消息传递开销,因为序列化消息(针对结构化克隆算法)可能会产生其他垃圾。使用可转移对象或共享内存缓冲区可以避免这种情况。

10-07 19:32
查看更多