Meta开源MemLab JavaScript内存泄露检测器

Android社区 收藏文章

内存泄漏的后果在单页应用程序(SPA)中更为严重,因为用户可能会在较长时间内继续与页面交互,而 MemLab 就是专为这种场景而设计的。

如上图所示,MemLab 的工作原理如下:

(1)导航到页面并返回;

(2)查找未释放的对象;

(3)显示泄露追踪结果。

创建场景,并将文件保存到 ~/memlab/scenarios/detached-dom.js 路径。

据悉,MemLab 使用了一个名为“Puppeteer”的 Node.js 库。它可以控制 Google Chrome 或其它基于 Chromium 内核打造的浏览器,且默认情况下以 headless 模式运行(方便命令行交互)。

Facebook 工程师解释称,MemLab 的工作方式就是导航到一个页面、然后离开。

正常情况下,可预计该页面分配的大部分内存也将被释放。但若没有,则意味其存在极高的内存泄露可能性。

MemLab 拥有一些特定于框架的知识(尤其是 React),这是由 Facebook 团队打造的框架、现也主导着 JavaScript 的开发。

运行 MemLab(或需几分钟)

React 使用存储在树结构中、被称作 Fibers 的对象,来表示内存中的浏览器文档对象模型(DOM)。

据该团队所述,这可能是存在“巨大内存泄露”的一个主要原因。拥有强连接图的缺点很是显著,若有任何外部引用指向图的任何部分,就无法对整个图开展垃圾回收。

MemLab 的另一特性,就是提供了 JavaScript 堆的图形视图、启用了用于检查堆快照的 API 。这意味着开发者能够编写开展内存断言的测试,例如声明某个对象将不再存在于内存中。

此外有一个用于查找重复字符串实例的工具,在某个案例中,团队发现字符串占用了 70% 的堆、且其中半数至少有一个重复的实例。

3 - 调试泄露追踪

包括 Chrome、Edge、Firefox 在内的浏览器,都有附带内存检查工具。但正如以为开发者在 Hacker News 上吐槽的那样 —— 这些开发工具难以在调试过程中揪出内存泄露的问题。

安装方面,MemLab 不仅可以通过 npm 包管理器、还可从 git 存储库进行构建。不过 Windows 平台必须使用 Git Bash,否则会在构建时遭遇失败。然后开发者可以运行 MemLab,将其传递给 JavaScript 文件中定义的场景。

最后,MemLab 的另一项强大功能,就是可以在测试期间作为命令过程的一部分而运行。这意味着如果代码中引入了严重的泄露,开发者们也能够在投入生产环境前加以捕获。

相关标签
 相关文章
王慧文病休53天,旗下OneFlow团队重新创业 1年以前  |  1次阅读
智己CEO现场怒怼!不满LS6和小鹏G6当对手 1年以前  |  1次阅读
董明珠回应落榜世界500强:总比爆雷的世界500强好 1年以前  |  1次阅读
阿里云上线 AI 视频生成工具 Live Portait:可一键让照片开口说话 1年以前  |  78次阅读
妙鸭相机将并入神力视界,阿里大文娱CTO郑勇:不是“搬家”是“回家” 1年以前  |  85次阅读
特斯拉上海超级工厂约40秒下线一台车,零部件本土化率超95% 1年以前  |  69次阅读
宁德时代发布神行超充电池,可实现充电10分钟行驶800里 1年以前  |  71次阅读
中科院博士被骗到缅甸已一年!女友:他负债几万,家里条件一般,以为去当翻译 1年以前  |  85次阅读
小鹏汽车否认收购玛莎拉蒂传闻:系谣言 1年以前  |  63次阅读
联想二季度净利润猛降66%,股价应声跳水 1年以前  |  80次阅读
业内人士:视觉中国对不同侵权主体采用差异化策略,老客由销售沟通新客发律师函 1年以前  |  70次阅读
恒大集团在美国申请破产保护 1年以前  |  56次阅读
劳斯莱斯首款纯电轿跑将在北美亮相 1年以前  |  89次阅读
realme印度前CEO确认加盟荣耀,即将推出手机新品 1年以前  |  88次阅读
OpenAI正在测试内容审核系统,一天可以完成六个月的工作 1年以前  |  80次阅读
谷歌百人“复仇者联盟”出击,将发对标GPT-4的大模型,26位研发主管名单流出 1年以前  |  77次阅读
OpenAI收购数字产品公司Global Illumination,为创立以来首笔公开收购 1年以前  |  80次阅读
海口规定:电动汽车充电服务费不得超过0.65元每度 1年以前  |  80次阅读
波音任命柳青为波音中国总裁 1年以前  |  88次阅读
业内人士谈图片复杂代理链:图片代理商越多摄影师分成越少 1年以前  |  67次阅读

扫一扫

在手机上阅读