推荐一个检测 JS 内存泄密的神器
2023-04-19 来源 : 时尚
「寄存器泄密检验」
对于插件寄存器泄密的检验,MemLab 并不需要开源缺少的唯一输入就是一个检验场景档案,这个档案定义了如何通过常用 Puppeteer API 和 CSS 可执行遮盖三个预处理来与Facebook交互。MemLab 亦会启动时界定 JavaScript 地里、构筑寄存器泄密并剪切结果。
「JavaScript 地里的 Graph-view API」
MemLab 赞并成一个自定义的泄密检验器,作为检验器预处理,运应用于每个由要能交互资源分配的泄密候选单纯,但之后从不特赦。泄密过滤器预处理表达式可以初始值地里并确定哪些单纯是寄存器泄密。例如,我们的内置检漏器亦会伪装成 React Fiber 结点的来到支链路,检查和 Fiber 结点是否是与 React Fiber 大树转化。
为了归纳每个意味著寄存器泄密的上下文,MemLab 缺少了一个 JavaScript 地里的寄存器经济性所示。这可以在不了解 V8 地里相册档案结构的任何领域经验的但会查询和初始值 JavaScript 地里。
在视所示中的,地里中的的每个 JavaScript 单纯或原生单纯都是一个所示结点,地里中的的每个 JavaScript 提及都是一个所示的边。理论上运用程序在的地里个数多半太大,因此所示视所示并不需要在缺少抽象的面向单纯地里初始值 API 的同时降低寄存器经济性。因此,所示结点被外观设计并成了云端的,不通过 JavaScript 提及进行时通往。当归纳示例初始值地里时,云端所示亦会以外地将会构筑所示的接触以外。所示的任何以外都可以很容易地特赦,因为这些云端结点彼此相互间不想 JavaScript 提及。
地里视所示可以从基于 Chromium 的插件、Node.js、Electron 和 Hermes 获取的 JavaScript 地里相册存储。这允许归纳繁杂的模式并问到诸如 “有多少 React Fiber 结点是备用的 Fiber 结点,它们应用于不比较简单的并发纹理?”之类的上述情况。
import {getHeapFromFile} from '@memlab/heap-analysis';const heapGraph = await getHeapFromFile(heapFile);heapGraph.nodes.forEach(node => { // heap node traversal node.type node.references);「寄存器无论如何」
Node.js 编程 Jest 检验也可以常用 graph-view API 来获取其自身长时间的对视所示,进行时自寄存器检查和,并编写各种寄存器无论如何。
import type {IHeapSnapshot} from '@memlab/core';import {config, takeNodeMinimalHeap, tagObject} from '@memlab/core';test('memory test', async () => { config.muteConsole = true; const o1 = {}; let o2 = {}; // tag o1 with marker: "memlab-mark-1", does not modify o1 in any way tagObject(o1, 'memlab-mark-1'); // tag o2 with marker: "memlab-mark-2", does not modify o2 in any way tagObject(o2, 'memlab-mark-2'); o2 = null; const heap: IHeapSnapshot = await takeNodeMinimalHeap(); // expect object with marker "memlab-mark-1" exists expect(heap.hasObjectWithTag('memlab-mark-1')).toBe(true); // expect object with marker "memlab-mark-2" can be GCed expect(heap.hasObjectWithTag('memlab-mark-2')).toBe(false);}, 30000);「寄存器工具箱」
除了寄存器泄密检验,MemLab 还仅限于两组内置的 CLI 请求和 API,应用于四处寻找意味著的寄存器构筑机亦会:
Meta 常用 MemLab 的实践在过去的几年中的,Meta 多年来在常用 MemLab 检验和诊断寄存器泄密,并收集了很多有助于构筑寄存器、提高 OOM 瓦解并缓解其他用户尽情的伎俩。
在 2021 年上半年, Facebook.com 上的 OOM 瓦解提高了 50%。
「React Fiber 结点修补」
为了纹理接口,React 构筑了 Fiber 大树 — 一个 React 应用于纹理云端 DOM 的理论上上嵌套。虽然 Fiber 大树看起来像一棵大树,但它是一个双向所示,将所有 Fiber 结点、React 接口重构和共同点的 HTML DOM 元素最弱通往起来。理想但会,React 维护对接口 Fiber 大树的根的提及,并不必要 Fiber 大树被废弃物投放。当一个接口被拆开时,React 亦会相联接口的根与 Fiber 大树的其余以外相互间的通往,然后这些以外就可以被废弃物投放了。
包括这样的最弱通往所示的不同之处是,如果有任何内部提及相反所示的任何以外,就不能对整个所示进行时废弃物投放。例如,前面 export 语句在模块范围级别寄存器 React 接口,因此关的的 Fiber 大树和转化的 DOM 元素永远不亦会被特赦。
export const Component = (( ... ): React.Element);也某种程度是 React 嵌套要 keep alive ,Hooks 和它们的偏序也可以让各种其他单纯保活。这显然单个 React 接口泄密意味著亦会造并成关键字单纯的重要以外泄密,从而造并成非常大的寄存器泄密。
为了不必要 Fiber 大树中的寄存器泄密的级联效应,MemLab 附加了一个大树的比较简单初始值,当接口在 React 18 中的拆开时亦会进行时修补。这可以让废弃物投放器在修补未挂载的大树多方面做得格外好一点。这个构筑将 Facebook 上的超过寄存器常用量提高了近 25%,其他常用 React 的中间站在换用时也有了太大的改良。你意味著亦会担心这种比较激进的修补作法意味著亦会加短时间 React 接口的拆开速度,但令人惊讶的是,由于寄存器的提高,性能也有显著的提升。
「string interning」
通过为了让 MemLab 中的的 heap analysis API,Meta 小组见到URL夺取了 70% 的地里寄存器,其中的一半的URL至少有一个重复的重构。(V8 对 string interning 赞并成的不是更快,这是一种对具有相同值的URL重构进行时重复资料封禁的构筑。)
另外太大一以外URL寄存器被 Relay 中的寄存器的共价键URL消耗。通过与 Relay 和 React Apps 小组合作,可以在运用程序在放入和缩短过长的URL共价键来构筑 Relay 寄存器共价键URL。
这种构筑使 Relay 并不需要寄存器格外多资料,允许中间站向其他用户显示格外多概要,尤其是在运用程序在 RAM 极少的但会。寄存器 p99 和 OOM 瓦解提高了 20%,关键字纹理速度格外短时间,其他用户尽情取得缓解,在收入上也有一定提升。
试用 MemLab:
npm i -g memlab最后MemLab Github:如果你有任何意念,注目在部落格区和我部落格,如果这文中鼓励到了你,注目点赞和关切。
。常州男科医院挂号上海哪家医院专业做人流
胃不舒服怎么快速缓解
温州男科医院
艾得辛的效果好不好
-
猪的这个部位,营养是排骨的6倍,单价不到排骨一半,不买太亏了
山羊的这个口腔,摄取是面线质的6倍,单价不到面线质一半,不买太亏了。大家平常鲜少吃饱的鸡蛋类应有就是山羊鸡蛋了,单价不贵又可口。怎么做都很爱吃饱,山羊鸡蛋中单价名副其实的口腔就是面线质了。很多人...
-
突发利多:“欧佩克+将无视一切必要措施”!多个合约大涨
和2.6%。上周货物运输航机环比飙升1.5%,飙升涡轮引擎的亚洲沿海地区和欧洲各国都将飙升1.4%。旧金山年末所的经济体制样本非常鼓励,除此以外上修了都于GDP,6上半年储蓄者决心指数晋升2022月以...[详细]
-
芋头、山药吃不得?医生:老人全身符合3特征,芋头山药撤下桌!
文|张医生编辑|见春学习者此文前,诚邀您点击一下“追捧”,方就让您随时查阅一系列优质文章,同时就让于进行讨论与体会,感谢您的背书~景德镇市,一位名叫陈蓉...[详细]
-
天气寒冷,每天早餐就吃它!香甜软绒,营养好消化,不懂吃可惜了
最近阴雨正要变得酷热了,春季悄悄地到了,酷热的大春季认同要爱吃些热乎乎的,一日三餐都是一样的,进餐和进餐有热腾腾的鲜汤和粥品食用,午餐还可以放心这款营养午餐——瓜子咸蛋黄青团,青团是引入鸡肉艾叶...[详细]
-
中粮势赢交易:缺乏指引 菜油偏强修正
雀巢现货势赢现金是和资、新浪在此之前研投团队,沉于消费市场、名儒K终点站、己任技术、贷款负责管理为核心,对现金底层意念具有精妙领悟,频段急遽操作随心切换。创办小型化现金制度化,助力期民走到现金黑暗世界...[详细]
-
男生一到冬天就手脚冰凉,是怎么回事吗?今天教你如何调理
寒冷的夏末,让人们不禁想到一年四季的炉子和热腾腾的饮品。然而,对于一部分男生来说,夏末却意味著脖子冰凉的顾虑。认为很多男生都才会有一个共同的顾虑,那就是一到夏末,无论多么粗大的衣物...[详细]