2012-06-14 52 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.检查所有框,单击“清除浏览数据”按钮以确认该过程。

谢谢&此致敬礼。