开始使用
在本节中,您将学习如何使用 memlab 检测内存泄漏。 请确保您已在本地机器上完成安装步骤。 我们首先定义场景文件,在其中指定 memlab 应如何与我们的页面交互。
编写测试场景
场景文件是一个 js
文件,它导出函数以提供有关如何导航到页面并与之交互的详细信息。 现在让我们复制以下示例并将其另存为 ~/memlab/scenario.js
文件,以便稍后找到它。
// initial page load's url
function url() {
return "https://www.youtube.com";
}
// action where you suspect the memory leak might be happening
async function action(page) {
await page.click('[id="video-title-link"]');
}
// how to go back to the state before action
async function back(page) {
await page.click('[id="logo-icon"]');
}
module.exports = { action, back, url };
有关更多详细信息,请查看IScenario API 文档。
注意
您可以将场景文件保存在任何位置。 我们稍后将使用此文件运行 memlab。
运行 memlab
在控制台中运行 memlab
以确保已安装。 您应该在控制台中看到帮助说明。
现在让我们将我们之前创建的 ~/memlab/scenario.js
文件传递给 memlab
,如下所示
$ memlab run --scenario ~/memlab/scenario.js
注意
强烈建议被测 Web 应用程序提供未压缩的代码,这使得泄漏报告中的保留者跟踪和符号更容易理解。
memlab 将实时更新一个面包屑,显示与目标网页交互的进度
page-load(baseline)[s1] > action-on-page(target)[s2] > revert(final)[s3]
Connecting to web server...
memlab 运行完成后,控制台将显示每个导航步骤的 JavaScript 堆大小以及按其潜在根本原因分组的所有泄漏对象。 详细信息可能因您的情况而异,但它会是这样的
page-load[23MB](baseline)[s1] > action-on-page[37.3MB](target)[s2] > revert[35.9MB](final)[s3]
面包屑中每个步骤的细分
- page-load(基线) - 这是我们的起点,我们看到加载页面时分配了多少内存
- action-on-page(目标) - 执行操作后 - 在我们的例子中,是点击 id 为
"video-title-link"
的链接 - 我们看到分配了多少内存 - revert(最终) - 这是我们执行返回/反向操作的时候。 在此示例中,是返回主页。
继续在此处阅读,了解如何调试 memlab 报告的内存泄漏跟踪。
如果您想了解 memlab 如何检测内存泄漏,请单击此处。