Meta开源MemLab JavaScript内存泄露检测器
CCDS
2022-09-16 14:27:28
52288
Facebook母公司Meta刚刚宣布了开源MemLab,该工具可在Chromium内核浏览器上,查找JavaScript应用程序中的内存泄露。Facebook工程团队指出:“使用我公司网络应用程序的人们,通常会立即留意到性能与功能正确性问题。但对于内存泄露,其隐蔽性就远不在同一水平线上了。取而代之的是,用户会得到一个响应性逐渐降低的会话”。内存泄漏的后果在单页应用程序(SPA)中更为严重,因为用户可能会在较长时间内继续与页面交互,而MemLab就是专为这种场景而设计的。如上图所示,MemLab的工作原理如下:(1)导航到页面并返回;(2)查找未释放的对象;(3)显示泄露追踪结果。创建场景,并将文件保存到~/memlab/scenarios/detached-dom.js路径。据悉,MemLab使用了一个名为“Puppeteer”的Node.js库。它可以控制GoogleChrome或其它基于Chromium内核打造的浏览器,且默认情况下以headless模式运行(方便命令行交互)。Facebook工程师解释称,MemLab的工作方式就是导航到一个页面、然后离开。正常情况下,可预计该页面分配的大部分内存也将被释放。但若没有,则意味其存在极高的内存泄露可能性。MemLab拥有一些特定于框架的知识(尤其是React),这是由Facebook团队打造的框架、现也主导着JavaScript的开发。运行MemLab(或需几分钟)React使用存储在树结构中、被称作Fibers的对象,来表示内存中的浏览器文档对象模型(DOM)。据该团队所述,这可能是存在“巨大内存泄露”的一个主要原因。拥有强连接图的缺点很是显著,若有任何外部引用指向图的任何部分,就无法对整个图开展垃圾回收。MemLab的另一特性,就是提供了JavaScript堆的图形视图、启用了用于检查堆快照的API。这意味着开发者能够编写开展内存断言的测试,例如声明某个对象将不再存在于内存中。此外有一个用于查找重复字符串实例的工具,在某个案例中,团队发现字符串占用了70%的堆、且其中半数至少有一个重复的实例。3-调试泄露追踪包括Chrome、Edge、Firefox在内的浏览器,都有附带内存检查工具。但正如以为开发者在HackerNews上吐槽的那样——这些开发工具难以在调试过程中揪出内存泄露的问题。安装方面,MemLab不仅可以通过npm包管理器、还可从git存储库进行构建。不过Windows平台必须使用GitBash,否则会在构建时遭遇失败。然后开发者可以运行MemLab,将其传递给JavaScript文件中定义的场景。最后,MemLab的另一项强大功能,就是可以在测试期间作为命令过程的一部分而运行。这意味着如果代码中引入了严重的泄露,开发者们也能够在投入生产环境前加以捕获。(举报)
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
赞同 0
反对 0