如何找出导致我的Javascript崩溃的浏览器标签的原因?

时间:2018-06-29 16:32:37

标签: javascript crash crash-reports

我正在使用Javascript制作rather extensive game。它是一种在线游戏制造商,它允许玩家上传媒体文件并使用它们来创建世界。不幸的是,它很容易在无法预测的时刻崩溃浏览器选项卡。到目前为止,我还没有发现这种模式-有时它会在几分钟内发生,有时它可以运行数小时而没有问题。

我曾尝试在Chrome中启用日志记录功能,但是当机时似乎没有在chrome_debug文件中生成错误报告。

我认为可能是程序使用了过多的内存(鉴于游戏的开放性,某些世界可能涉及下载相当大的数据文件,尽管这似乎与崩溃真正发生的时间无关,而大型世界确实似乎更容易崩溃,在加载世界数据时它们并不总是崩溃。

我尝试使用Electron将其转换为可执行应用程序,但该应用程序仍然崩溃。如果是内存问题,那不应该发生,对吧?

有什么办法找出导致代码崩溃的原因吗?

1 个答案:

答案 0 :(得分:0)

大多数Javascript中无法预测的崩溃是由内存泄漏引起的-内存泄漏中仍然存储有对象且未被垃圾收集器拾取的对象。 Javascript中的每个对象都存储在全局范围内某个位置的变量中,或者与本身连接到全局范围的另一个对象相关联。当“树”的“分支”被删除并且无法被全局范围访问时,垃圾收集器将销毁它。

但是,如果没有在适当的时候将其从全局范围中删除,则该对象将保留在内存中。这通常发生在将对象添加到阵列但不再使用时未从该阵列中删除对象时。随着时间的流逝,这些对象会逐渐堆积,直到进程由于内存过载而崩溃。

要查找Chrome中的内存泄漏,请按F12并打开“性能”标签。通过随时间记录页面,您可以查看正在使用的内存量。绿线(节点)在这里最重要-它指的是内存中的对象数量。如果节点随着时间的推移不断增加(总会有增加和减少,但是如果总体水平不断增加),则通常意味着内存泄漏。

要查找导致该问题的特定对象,请打开“内存”选项卡以获取内存堆的快照或时间轴配置文件。这使您可以对任何给定时间在内存中的特定对象进行计数。如果某种对象的数量超出了应有的数量,那就是泄漏所在。