有没有办法在测试中找到 JavaScript 内存泄漏?

Is there a way to find JavaScript memory leaks within tests?

我刚刚完成 JavaScript 应用程序的测试编写,这是我第一次使用 Jasmine。一切正常,但我仍然需要测试应用程序是否存在内存泄漏。甚至可以在我的规格中以编程方式检查它吗?也许有一些额外的图书馆?

据我所知,没有自动找到 javascript 内存泄漏源的方法。 Javascript 内存泄漏是一件非常讨厌的事情,您可能会在这上面浪费很多时间。最近我正在开发一个非常大的企业 web 解决方案作为一个单页应用程序,具有近 1mb 的最小化自写代码。突然我们意识到我们的应用程序正在严重泄漏。我尝试了数百种技术来寻找内存泄漏的根源,对我来说最简单的方法是使用 google chrome profiler,获取堆快照并比较不同的堆快照。以下是有关操作方法的更多信息:

https://developer.chrome.com/devtools/docs/javascript-memory-profiling

祝您度过愉快的一周,调试您的应用程序中的内存泄漏,希望它花费的时间比我的情况少。 :)

Chrome 具有 window.performance API 的非标准扩展 - (window.performance.memory),您可以在其中测量内存使用情况。

为了启用精确的内存统计,您必须使用这个标志:--enable-precise-memory-info

但是你也需要在你测试后强制GC判断内存是否保留。因为 CG 不会立即发生。

使用 Chromium 浏览器,您可以 运行 它带有一个特殊的命令标志来公开强制 GC 的方法:

chromium-browser --js-flags='--expose_gc'

这使您可以访问方法 window.gc()