性能优化
内存泄漏
内存泄漏的定义
内存泄漏的危害
垃圾回收机制如何释放内存
- 引用计数法:语言引擎有一张“引用表”,保存了内存所有资源被引用的次数,如果一个值被引用的次数为0,这个值的内存空间将被释放。引用计数法存在的弊端是循环引用的内存得不到释放。
- 标记清除法:语言引擎有一张“roots”列表,roots中存储的是全局变量root,所有root被标记为激活状态,然后对子对象进行递归检查,所有可达的对象都是激活状态,剩余的会被标记成垃圾会被回收释放内存。
内存泄漏的场景
- 事件监听未被解绑:组件事件在卸载时未解绑。
- 定时器未被清除:被遗忘的定时器和定时器内部的引用。
- 全局变量:不再用到的全局变量。
- DOM引用:DOM赋值给变量用完没有清空引用。
- 闭包:闭包的不规范使用。
怎么排查内存泄漏
- 开发者工具的performance选项卡可以监听内存变化梯度。
- 开发者工具的memory选项卡可以查看具体内存的使用情况。
- node可以通过process.memoryUsage()查询内存使用情况来判断是否有内存泄漏。
怎么解决内存泄漏
- 事件监听未被解绑:组件事件在卸载时解绑事件监听。
- 定时器未被清除:被遗忘的定时器和定时器内部的引用手动清理。
- 全局变量:用严格模式避免不必要的全局变量。
- DOM引用:DOM赋值给变量用完清空引用。
- 闭包:避免共享闭包作用域,清除闭包内不必要的引用。
长任务优化
长任务的定义
长任务的危害
长任务的场景
怎么排查长任务
怎么解决长任务
资源加载优化