惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
美团技术团队
Recent Announcements
Recent Announcements
B
Blog
GbyAI
GbyAI
雷峰网
雷峰网
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
V
V2EX
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
A
About on SuperTechFans
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
aimingoo的专栏
aimingoo的专栏

博客园 - ฅ˙-˙ฅ

用display实现效果:上面根据内容自适应高度;下面撑满所有,并且超出时候显示滚动条 react更改多层对象变量的方法 react umi model使用注意事项 拖动改变顺序 博文阅读密码验证 - 博客园 antd input控制只能输入数字并进行格式化显示(antd 3版本) react函数式组件:父组件调用子组件方法 react form表单中自定义组件的数据双向绑定实现 vue3+vant h5: Rem 移动端布局适配之postcss-pxtorem和lib-flexible 项目记录文档 前端mock方案:使用json-server mac安装使用nginx 博文阅读密码验证 - 博客园 umi修改antd主题颜色(通过less文件修改) 部署一个vue项目到阿里云服务器 vue项目通过点击按钮实现复制图片(非图片url和base64),可发送到聊天框 vue重新刷新当前路由(非浏览器强刷,不会出现闪屏) 使用Vue.extend实现iview Upload在单文件上传时,拖拽多个文件给出错误提示 uni-app怎么使用路由守卫,并且路由配置和pages.json中只写一套 uni-app小程序iPhone X适配底部栏黑横线 使用css自定义变量实现实现主题切换功能
js中常见内存泄漏和场景
ฅ˙-˙ฅ · 2026-08-18 · via 博客园 - ฅ˙-˙ฅ

内存泄漏常见情形

image

为了排查chrome插件对内存占用的干扰,最好再隐身模式下调试代码;
谷歌浏览器对内存的调试有两个可用面板:性能(Merformance)+ 内存(Memory)
一般先在性能(Merformance)面板录制内存占用随时间变化的图像,对是否存在内存泄漏有个直观的判断;然后在内存(Memory)面板定位问题发生的位置;

1. 使用过多的全局变量

代码示例:

<!DOCTYPE html>
<html>

<head>
  <title>
    Memory Profile
  </title>
</head>

<body>
  <button onclick="grow()">Global Var</button>
  <script type="text/javascript">

    function LargeObj() {
      this.largeArr = new Array(1000000);
    }

    var x = [];

    function grow() {
      var o = new LargeObj();

      x.push(o);
    }
  </script>
</body>

</html>

排查调试:

(1)看内存变化情况
image
(2)执行可疑操作,前后怕快照,查看
image
image
(3) 定位内存分配在代码中的位置
蓝色条、灰色条可以看到内存分配和回收的时机和频率
image

2. 存在分离的dom

分离的dom是指dom从dom树中移除了,但是代码js中存在对它的引用

代码示例:

<!DOCTYPE html>
<html>

<head>
  <title>
    Memory Profile
  </title>
</head>

<body>
  <button id="button">移除列表</button>
  <ul id="list">
    <li>项目 1</li>
  </ul>
  <script type="text/javascript">
    var button = document.getElementById('button');
    var list = document.getElementById('list');

    button.addEventListener('click', function () {
      list.remove();
    });
  </script>
</body>

</html>

排查调试:

image
image

3. 闭包造成的内存泄漏

代码示例:

image

排查调试:

image

4. 控制台打印等、打印不当造成内存泄漏

(生产建议去掉打印语句)

推荐视频:https://www.bilibili.com/video/BV13y4y1H71m/?spm_id_from=333.337.search-card.all.click&vd_source=24e9533d85b0805ca09a73b03223aee4

注明:本文是对视频的总结