6

有没有办法对javascript内存泄漏进行单元测试?我的意思是,有没有办法直接从 javascript 代码访问堆以检查分离的 DOM 树或增加的内存使用情况?

我知道你可以从 Chrome 开发工具中做到这一点,但我想知道是否有办法直接从我的单元测试中做到这一点,因为编写一些代码、获取堆快照、执行潜在的内存泄漏操作似乎很乏味,拍摄另一个堆快照,并在每次编写另一个代码片段时重复每个潜在的内存泄漏操作。更不用说在一个地方添加代码可能会导致应用程序的另一部分出现意外的内存泄漏。

只是我写了一个内存泄漏巨大的应用程序,我不得不从头开始。当我这次开发应用程序时,我想确保我的单元测试能够检测到我刚刚创建了内存泄漏,并且我可以尽快消除它。

我想我已经看到过这样的 C++ 工具,但不是 Javascript。有人知道吗?谢谢!

4

3 回答 3

4

根据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(),您可以调用该方法来强制 GC。

例如,这可能会打开在单元测试中测试内存使用的可能性。

于 2016-12-07T17:41:12.720 回答
0

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

于 2021-01-22T22:29:23.883 回答
-2

要检查内存泄漏,您需要访问内存分配大小或变量大小。在 JavaScript 中不可能做到这一点。

于 2013-07-22T08:55:11.357 回答