console.log 会导致内存泄漏吗

console.log 会导致内存泄漏吗

经常看到一些文章说 console.log 会导致内存泄漏,这是真的吗?那以后是不是不能用 console.log 了?

这些说法多少有些以偏概全。先说结论:

  1. nodejs 中 console.log 不会导致内存泄漏
  2. 浏览器中使用 console.log 打印对象时,会导致内存泄漏(无论打不打开开发者工具)
  3. 少量的内存泄漏根本就不在乎,如果是循环中打印大量的对象,就要注意了

打印基本类型的数据时肯定不会造成内存泄漏。而在浏览器控制台打印对象时,由于需要保存对象的引用(以便随时查看对象的详细信息),因此表面上我们在程序中不再使用这个对象,但是控制台中还有这个对象的引用,导致对象无法被回收,从而造成内存泄漏。

html 复制代码
<body>
  <button>打印</button>

  <script>
    const btn = document.querySelector('button')
    btn.addEventListener('click', () => {
      // 大概 4MB 大小的数组
      console.log(new Array(1024 * 1024).fill(0))
    })
  </script>
</body>

上面代码中,每次点击按钮都会打印一个 4MB 大小的数组,打开浏览器任务管理器(shift + Esc),观察网页所占用的内存,

可以看到,不管打不打开浏览器开发者工具,内存都会持续增长,这就是内存泄漏。

那以后到底用不用 console.log 呢?其实很简单,开发环境用无所谓,生产环境借助打包工具自动帮助我们删除代码中的 console.log 即可。

以 vite 为例,只需要安装 terser,并在 vite.config.js 中配置 build 选项即可:

javascript 复制代码
export default {
  build: {
    minify: 'terser',
    terserOptions: {
      compress: {
        // 删除 console 语句
        drop_console: true,
        // 删除 debugger
        drop_debugger: true,
      },
    },
  },
}

不要轻视内存泄漏,但也不要害怕内存泄漏!全局变量不会被 gc 回收,某种意义上也相当于内存泄漏,那会有人因此不用全局变量吗?

所以说 console.log 导致的内存泄漏压根就不是事儿!

参考

相关推荐
傻啦嘿哟11 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
烬羽12 小时前
React Router v7 完全指南:一个 Demo 吃透前端路由
javascript·react.js·前端框架
現実君12 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
烬羽12 小时前
从"整个页面刷新"到"丝滑切换":手写一个 HashRouter 彻底搞懂前端路由
javascript·前端框架·全栈
mubei-12312 小时前
SpringDAO的用法
java·开发语言·数据库
用户9385156350712 小时前
从零理解 React Router v6:每一个 API 都是怎么工作的
前端·javascript·全栈
格林威14 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
kyriewen15 小时前
别再这样写条件渲染了——你的React组件里藏着这5种定时炸弹
前端·javascript·react.js
初级代码游戏16 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
梦想CAD控件16 小时前
网页端CAD的图形选择、编辑与夹点操作教程
前端·javascript·node.js