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

JavaScript高级程序设计读书分享之4章——4.3垃圾回收

JavaScript高级程序设计(第4版)读书分享笔记记录

适用于刚入门前端的同志

4.3.3 性能

垃圾回收程序会周期性运行,如果内存中分配了很多变量,则可能造成性能损失,因此垃圾回收的
时间调度很重要。尤其是在内存有限的移动设备上,垃圾回收有可能会明显拖慢渲染的速度和帧速率。开发者不知道什么时候运行时会收集垃圾,因此最好的办法是在写代码时就要做到:无论什么时候开始收集垃圾,都能让它尽快结束工作。

内存泄漏

写得不好的 JavaScript 可能出现难以察觉且有害的内存泄漏问题。在内存有限的设备上,或者在函数会被调用很多次的情况下,内存泄漏可能是个大问题。JavaScript 中的内存泄漏大部分是由不合理的引用导致的。
  • 意外声明全局变量是最常见但也最容易修复的内存泄漏问题。
function setName() { name = 'Jake'; 
}
此时,解释器会把变量 name 当作 window 的属性来创建(相当于 window.name = 'Jake')。
可想而知,window 对象上创建的属性,只要 window 本身不被清理就不会消失。这个问题很容易解决,只要在变量声明前头加上 varlet const 关键字即可,这样变量就会在函数执行完毕后离开作用域。
  • 定时器也可能会悄悄地导致内存泄漏。
let name = 'Jake'; 
setInterval(() => { console.log(name); 
}, 100);
只要定时器一直运行,回调函数中引用的 name 就会一直占用内存。垃圾回收程序当然知道这一点,因而就不会清理外部变量。
  • 使用 JavaScript 闭包很容易在不知不觉间造成内存泄漏。
let outer = function() { let name = 'Jake'; return function() { return name; }; 
};
调用 outer()会导致分配给 name 的内存被泄漏。以上代码执行后创建了一个内部闭包,只要返回
的函数存在就不能清理 name,因为闭包一直在引用着它。假如 name 的内容很大(不止是一个小字符串),那可能就是个大问题了。
http://www.lryc.cn/news/15235.html

相关文章:

  • Java线程的6 种状态
  • 5年测试在职经验之谈:3年手工测试、2年的自动化测试,从入门到不可自拔...
  • QHash-官翻
  • MYSQL 配置优化
  • 多 态
  • Java集合
  • 高校借力泛微,搭建一体化、流程化的​内控管理平台
  • 使用人工智能赚钱的方式,行业领域有哪些?
  • 【数组中重复的数字】-C语言-题解
  • C++调用Python脚本进行18次循环操作后,脚本不执行
  • 字节10年架构师职业发展经历,助你做好职业规划
  • ArrayList真的是因为实现了RandomAccess接口才能做到快速随机访问的吗
  • OSI七层模型与物理层与设备链路层
  • Java8的Optional类的使用 和 Stream流式操作
  • Authorization Server 认证服务
  • 研制过程评审活动(五)生产定型阶段
  • NCUT加权的NMF
  • 从0开始的ios自动化测试
  • vue3中使用jszip压缩文件
  • React 虚拟DOM的前世今生
  • Java环境变量配置
  • 超详细解读!数据库表分区技术全攻略
  • Redis高可用集群方案
  • 企业微信机器人发送消息
  • 使用PHP+yii2调用asmx服务接口
  • 【042】904. 水果成篮[滑动窗口]
  • Linux基础知识(一)
  • Redis面试题
  • 微服务之Eureka
  • 日日顺于贞超:供应链数字化要做到有数、有路、有人