2012-06-14 131 views
4

此崩潰是小提琴:http://jsfiddle.net/36mdt/的JavaScript冷凍/在Chrome

約10-20秒鐘後,顯示開始崩潰後隨機和不久凍結。我無法在Firefox中重現這一點。

分析顯示沒有什麼不尋常的。

http://jsfiddle.net/3pbdQ/顯示確實存在內存泄漏。即使是1 FPS,內存使用量也是每幀5兆字節。

在一個側面說明,這個例子真的顯示了Math.random()真的不是如此隨機。

+3

我還沒有答案,但那個視覺效果真是太棒了...... :) –

+4

你有沒有注意到10秒鐘後,它使用了'1.2GB'的內存 – Esailija

+0

@Esailija任務管理器顯示,但分析顯示沒有變化......? – trumank

回答

3

我已經完成了2次性能改進,5分鐘後也沒有崩潰(似乎也沒有泄漏內存)。結帳http://jsfiddle.net/3pbdQ/3/

  1. 不計算每次迭代
  2. 使用超時,而不是凍結區間內的大小。
  3. 地板一批

剖析使用位運算符揭示了什麼不尋常。

Chrome Profiler不能與WebWorkers,AFAIK一起使用。按照保羅愛爾蘭的對話:

「檢查有關:檢查是否有共享的工人,你也可以做console.profile()工人代碼(我認爲)內,並捕捉那些位的。‘清理’是垃圾收集器:如果在清理之後還有越來越多的內存過多,那就是泄漏。「

而且

在一個側面說明,這個例子真正體現出的Math.random()是如何真正 不是那麼隨意。

這是衆所周知的,沒有完美的隨機算法,但無論如何分組的顏色,你看到的是一羣因爲你沒有設置canvas.height和canvas.width,它從CSS值不同。

編輯:仍然泄漏記憶,我不知道爲什麼,約10秒後它'清理'。超過我的知識,但工作順利60 FPS(var TIME = 16

+0

是的,對我來說就像是一種魅力。 – Bruno

+1

如果讓它坐半個小時,它仍然有內存泄漏。 – trumank

+0

@MathWizz是的,我意識到,根據我最後的編輯,但超出了我的知識,關於如何「正確地清理」,除了垃圾收集器。 –

0

這是一個不幸的,已知Chrome bug

+0

有趣......最近已經修復:http://code.google.com/p/chromium/issues/detail?id=132769#c7:D – trumank

1

根據您使用的系統和瀏覽器版本,儘管我盡力提供與大多數系統兼容的常用步驟,但某些步驟可能會有所不同。

禁用沙盒: 1.右鍵單擊Google Chrome桌面圖標。 2.選擇屬性。 3.單擊快捷方式>目標。 4.添加「--no-sandbox」 5。單擊應用|好。 6.下載並安裝ZombieSoftFix。 7.檢查並解決檢測到的衝突。

禁用插件: 1.在地址欄中輸入「about:plugins」。 2.按ENTER鍵。 3.禁用列表頁面中顯示的所有插件。

清除臨時文件: 1.單擊扳手。 2.選擇更多工具|清除瀏覽數據。 3.檢查所有框,單擊「清除瀏覽數據」按鈕以確認該過程。

謝謝&此致敬禮。