性能优化

2 阅读2分钟

内存泄漏

内存泄漏的定义

  • 不再用到的内存没有及时释放。

内存泄漏的危害

  • 影响系统性能
  • 导致系统进程崩溃

垃圾回收机制如何释放内存

  • 引用计数法:语言引擎有一张“引用表”,保存了内存所有资源被引用的次数,如果一个值被引用的次数为0,这个值的内存空间将被释放。引用计数法存在的弊端是循环引用的内存得不到释放。
  • 标记清除法:语言引擎有一张“roots”列表,roots中存储的是全局变量root,所有root被标记为激活状态,然后对子对象进行递归检查,所有可达的对象都是激活状态,剩余的会被标记成垃圾会被回收释放内存。

内存泄漏的场景

  • 事件监听未被解绑:组件事件在卸载时未解绑。
  • 定时器未被清除:被遗忘的定时器和定时器内部的引用。
  • 全局变量:不再用到的全局变量。
  • DOM引用:DOM赋值给变量用完没有清空引用。
  • 闭包:闭包的不规范使用。

怎么排查内存泄漏

  • 开发者工具的performance选项卡可以监听内存变化梯度。
  • 开发者工具的memory选项卡可以查看具体内存的使用情况。
  • node可以通过process.memoryUsage()查询内存使用情况来判断是否有内存泄漏。

怎么解决内存泄漏

  • 事件监听未被解绑:组件事件在卸载时解绑事件监听。
  • 定时器未被清除:被遗忘的定时器和定时器内部的引用手动清理。
  • 全局变量:用严格模式避免不必要的全局变量。
  • DOM引用:DOM赋值给变量用完清空引用。
  • 闭包:避免共享闭包作用域,清除闭包内不必要的引用。

长任务优化

长任务的定义

长任务的危害

长任务的场景

怎么排查长任务

怎么解决长任务

资源加载优化