2017-09-08 105 views
3

我有一些处理这不一定是CPU密集型的,但大量的临时对象的创建该动画过程中产生令人讨厌的垃圾收集打嗝等网络工作者是否有自己的垃圾收集器?

将卸载该临时对象的创建过程,网络工作者有利于缓解那?换句话说 - GC打嗝会被隔离到web worker线程而不会影响我的主线程,还是GC会影响两个线程?

+0

我的猜测是,他们做不过这纯粹是猜测 – Ced

回答

4

ECMAScript规范没有指定任何形式的存储器管理,垃圾回收仅在非标准部件提及。

同样的网络工作者规范没有说太多关于垃圾收集除了WRT。一些物体必须存活多久。

因此,这是具体的实施行为。即使实现实现了每个工作人员的GC,并避免了一般情况下的共享开销,但由于内存压力,他们仍可能触发全球所有工作人员的集合,特别是在内存受限的系统上。

这就是说,它更有可能的是,你一定能取得比工人没有一些GC隔离。但是你必须小心避免工作者和主线程之间的消息传递开销,因为序列化消息(用于结构化克隆算法)可能产生额外的垃圾。使用可转移或共享内存缓冲区可以避免这种情况。

+0

感谢,接受了答案:)将是巨大的,如果有对主流浏览器选择如何实现这一一些文档。你有没有这些信息? – davidkomer

+2

它们的实现更改和GC属性不是其保证的一部分,因此它们不会为外部用户记录它。但是你仍然可以在他们的bugtrackers或科技博客中找到信息。对于Firefox它是地方选区已被同一会儿所以相当长的一段隔离,但对内存压力回退事件,我提到,有些共同的东西也存在这种情况。泰勒博士:是的,排序。但没有官方或明确的保证,取决于实施情况 – the8472