JavaScript的单元测试:如何检测内存泄漏问题

6
有没有一种方法可以单元测试 JavaScript 的内存泄漏?我的意思是,有没有一种直接从 JavaScript 代码访问堆的方法来检查分离的 DOM 树或增加的内存使用情况?
我知道可以在 Chrome Dev Tools 中进行此操作,但我想知道是否有一种直接从我的单元测试中进行操作的方法,因为编写一些代码、进行堆快照、执行可能会导致内存泄漏的操作、再次进行堆快照,然后重复每个潜在的内存泄漏操作,每次编写另一个片段都是很繁琐的。更别说在一个地方添加代码可能会导致另一个部分的应用程序发生意外的内存泄漏。
只是我写了一个有巨大内存泄漏的应用程序,所以我不得不从头开始。这次开发应用程序时,我想确保我的单元测试能够检测到我刚刚创建的内存泄漏,并尽快消除它。
我认为我已经看到类似于 C++ 的工具,但不适用于 JavaScript。有人知道吗?谢谢!

Chrome开发者工具 -> Profiles. - elclanrs
3个回答

5
根据 MDN关于window.performance的文档,Google Chrome有一个非标准扩展(window.performance.memory),可以访问usedJSHeapSize、totalJSHeapSize、jsHeapSizeLimit等值。
要获取字节级精度,需要使用--enable-precise-memory-info标志。
对于垃圾回收,我发现唯一的强制浏览器执行GC的方法是使用Chromium,并带有特殊的命令标志。当运行此命令时:
chromium-browser --js-flags='--expose_gc'

你可以访问方法window.gc(),通过调用该方法来强制进行垃圾回收。
例如,这可能会为单元测试中的内存使用情况提供可能性。

1

针对Node.js,可以使用leakage来执行与内存相关的单元测试。如果您的测试涉及DOM,则可以尝试使用jsdom来模拟浏览器行为,但我不能保证它会给您相同的结果。


-1

要检查内存泄漏,您需要访问内存分配大小或变量大小。在JavaScript中无法做到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接