当前位置: 首页 > news >正文

【前端】如何检查内存泄漏

在实际的场景中,如果观察到内存持续出现峰值,并且内存消耗一直没有减少,那可能存在内存泄漏。
使用 Chrome DevTools 来识别内存图和一些内存泄漏,我们需要关注以下两个方面:
● 使用性能分析器可视化内存消耗;
● 识别分离的 DOM 节点。
(1)使用性能分析器可视化内存消耗
以下面的代码为例,

<!DOCTYPE html>
<html lang="en"><head><title>Memory leaks</title></head><body><button id="print">打印</button><button id="clear">清除</button></body>
</html>
<script>var longArray = [];function print() {for (var i = 0; i < 10000; i++) {let paragraph = document.createElement("p");paragraph.innerHTML = i;document.body.appendChild(paragraph);}longArray.push(new Array(1000000).join("y"));}document.getElementById("print").addEventListener("click", print);document.getElementById("clear").addEventListener("click", () => {window.longArray = null;document.body.innerHTML = "Cleared";});
</script>

有两个按钮:打印和清除。点击“打印”按钮,通过创建 paragraph 节点并将大字符串设置到全局,将1到10000的数字追加到DOM中。
“清除”按钮会清除全局变量并覆盖 body 的正文,但不会删除单击“打印”时创建的节点
在这里插入图片描述
当每次点击打印按钮时,JavaScript Heap都会出现蓝色的峰值,并逐渐增加,这是因为JavaScript正在创建DOM节点并字符串添加到全局数组。当点击清除按钮时,JavaScript Heap就变得正常了。 除此之外,可以看到节点的数量(绿色的线)一直在增加,因为我们并没有删除这些节点。
(2)识别分离的 DOM 节点
当一个节点从 DOM 树中移除时,它被称为分离,但一些 JavaScript 代码仍然在引用它。让我们使用下面的代码片段检查分离的 DOM 节点。通过单击按钮,可以将列表元素添加到其父级中并将父级分配给全局变量。简单来说,全局变量保存着 DOM 引用。

var detachedElement;
function createList(){let ul = document.createElement("ul");for(let i = 0; i < 5; i++){ul.appendChild(document.createElement("li"));}detachedElement = ul;
}
document.getElementById("createList").addEventListener("click", createList);

使用 heap snapshot 来检查分离的DOM节点,可以在Chrome DevTools 的Memory面板中打开Heap snapshots选项:点击下面蓝色的Take snapshot按钮,我们可以在中间的搜索栏目输入Detached来过滤结果以找到分离的DOM节点,如下所示:
4951abb59e8f706c8873b8a801112aa2.png

相关文章:

  • 如何把两个视频合并成一个视频?无需视频编辑器即可搞定视频合并
  • 知识知多少——Matplotlib 库
  • QT窗口相关控件及其属性
  • 制作一款打飞机游戏23:编辑器ui
  • 【Nacos-安全与限流机制健全06 】
  • 存储新势力:助力DeepSeek一体机
  • 【专题刷题】二分查找(二)
  • 【Luogu】动态规划四
  • 2025时间序列都有哪些创新点可做——总结篇
  • 常用第三方库:flutter_boost混合开发
  • Shell脚本-while循环语法结构
  • MySQL数据库(13) 用户管理
  • kubernetes环境手动部署 Prometheus 监控系统安装文档
  • 差分优化效率
  • 研发内控新规下的合规之道:维拉工时助力企业穿越IPO审查雷区
  • 深入浅出 MVVM:理解现代前端开发的核心架构模式
  • 贪心算法~~
  • Sand AI 开源 MAGI-1 视频生成模型,近屿智能带你领略无限扩展的 AI 视界
  • 《深入理解计算机系统》阅读笔记之第二章 信息的表示和处理
  • Apipost免费版、企业版和私有化部署详解
  • 上海出台灵活就业人员公积金新政:不限户籍、提取自由,6月起施行
  • 朝鲜证实出兵俄罗斯协助收复库尔斯克
  • 广州海关原党委委员、副关长刘小威被开除党籍
  • 央视曝光假进口保健品:警惕!保税仓发货不等于真进口
  • 马上评|演唱会云集,上海如何把“流量”变“留量”
  • 民航局答澎湃:督促各单位进一步完善航班大面积延误和大面积备降应急处置预案