解读生产环境为何避免使用console.log
console.log:向web开发控制台打印一条消息,常用来在开发时调试分析。有时在开发时,需要打印一些对象信息,但发布时却忘记去掉console.log语句,这可能造成内存泄露。
在传递给console.log的对象是不能被垃圾回收 ??,因为在代码运行之后需要在开发工具能查看对象信息。所以最好不要在生产环境中console.log任何对象。
实例------>demos/log.html
Leaker - 锐客网
这里结合Chrome的Devtools–>Performance做一些分析,操作步骤如下:
- 开启Performance的记录
- 执行CG按钮,创建基准参考线
- 多次点击【click】按钮,新建Leaker对象
- 执行CG按钮
- 停止记录
文章图片
可以看出【JS Heap】线最后没有降回到基准参考线的位置,显然存在没有被回收的内存。如果将代码修改为
// console.log("Leaking an object %o: %o", (new Date()), this);
重复上述的操作步骤,分析结果如下:
【解读生产环境为何避免使用console.log】
文章图片
从对比分析结果可知,console.log打印的对象是不会被垃圾回收器回收的。
因此最好不要在页面中console.log任何对象,包括warn、error等兄弟,这样可能会影响页面的整体性能,特别在生产环境中,这些细节需要特别的关注。
彩蛋 试试以下console代码
const style1 = [
'color: #fff',
'background: #848484',
'padding: 1px',
'border-radius: 3px 0 0 3px'
].join(';
');
const style2 = [
'color: #fff',
'background: #1890FF',
'padding: 1px',
'border-radius: 0 3px 3px 0'
].join(';
');
console.log('%c NODE_ENV %c production ', style1, style2);
console.log('%c BUILD_TIME %c %s ', style1, style2, new Date().toLocaleString());
推荐阅读
- 环境搭建|【ubuntu-nginx安装】
- 麒麟操作系统 (kylinos) 从入门到精通 - 办公环境 - 第十八篇 金融理财基金股票使用
- DataWorks开发ODPS SQL开发生产环境自动补全ProjectName
- docker环境搭建mgr集群的问题及原理
- 直播回顾 | smardaten李鸿飞解读中国低/无代码行业研究报告(风向变了)
- 麒麟操作系统|麒麟操作系统 (kylinos) 从入门到精通 - 办公环境 - 第十七篇 C# .Net 6开发环境搭建
- 数据分析|Oracle - 基本入门
- Java|阿里首席架构师解读(Spring Cloud与Docker微服务架构实战)
- 为|为 Serverless Devs 插上 Terraform 的翅膀,解耦代码和基础设施,实现企业级多环境部署(下)
- 三项最高级认证,两项创新技术、两大优秀案例,阿里云亮相云原生产业大会