2017-09-08 158 views
3

我有一些處理這不一定是CPU密集型的,但大量的臨時對象的創建該動畫過程中產生令人討厭的垃圾收集打嗝等網絡工作者是否有自己的垃圾收集器?

將卸載該臨時對象的創建過程,網絡工作者有利於緩解那?換句話說 - GC打嗝會被隔離到web worker線程而不會影響我的主線程,還是GC會影響兩個線程?

+0

我的猜測是,他們做不過這純粹是猜測 – Ced

回答

4

ECMAScript規範沒有指定任何形式的存儲器管理,垃圾回收僅在非標準部件提及。

同樣的網絡工作者規範沒有說太多關於垃圾收集除了WRT。一些物體必須存活多久。

因此,這是具體的實施行爲。即使實現實現了每個工作人員的GC,並避免了一般情況下的共享開銷,但由於內存壓力,他們仍可能觸發全球所有工作人員的集合,特別是在內存受限的系統上。

這就是說,它更有可能的是,你一定能取得比工人沒有一些GC隔離。但是你必須小心避免工作者和主線程之間的消息傳遞開銷,因爲序列化消息(用於結構化克隆算法)可能產生額外的垃圾。使用可轉移或共享內存緩衝區可以避免這種情況。

+0

感謝,接受了答案:)將是巨大的,如果有對主流瀏覽器選擇如何實現這一一些文檔。你有沒有這些信息? – davidkomer

+2

它們的實現更改和GC屬性不是其保證的一部分,因此它們不會爲外部用戶記錄它。但是你仍然可以在他們的bugtrackers或科技博客中找到信息。對於Firefox它是地方選區已被同一會兒所以相當長的一段隔離,但對內存壓力回退事件,我提到,有些共同的東西也存在這種情況。泰勒博士:是的,排序。但沒有官方或明確的保證,取決於實施情況 – the8472