性能优化

前端性能是度量指标 + 瓶颈场景的组合:首屏、交互响应、长任务、内存与电量等。此处列出与 JavaScript、DOM与BOM事件机制 强相关的常见手段,而非完整 Web Vitals 清单。


减少主线程长任务

  • 拆分计算requestIdleCallback(有空再做)、scheduler.postTask(若可用)、或分包到 Web Worker
  • async / await 不解冻 CPU:只是把任务延后到其他 tick,重计算仍需移出或切片。

异步编程


DOM 与渲染

  • 批量读写:先读后写,避免交替触发布局(layout thrashing)。
  • 离线更新DocumentFragment、克隆节点、display: none 容器内批量改完再挂上树。
  • requestAnimationFrame:与帧同步的视觉更新(滚动动画、进度条等)。

事件与滚动

  • 节流(throttle):固定间隔触发,适合 scrollresize
  • 防抖(debounce):停止触发后延迟执行,适合输入联想、resize 结束再算布局。
  • passive: true:监听 touchstart / wheel 等时声明不会 preventDefault,部分浏览器可优化滚动(若仍会阻止默认行为则不要设 passive)。

实现常依赖 作用域与闭包 保存计时器句柄。


网络与资源

  • 按需加载:动态 模块化 import()、路由级 code splitting。
  • 缓存策略:HTTP 缓存、Service Worker(若使用)、避免多余重复请求。
  • fetch 并发控制:限制同时 in-flight 数量,避免拥塞。

内存

  • 移除监听器清理定时器,避免 作用域与闭包 持有已脱 DOM 的引用。
  • 弱引用集合WeakMap / WeakSet 适合与对象生命周期绑定的元数据(不可枚举键、垃圾回收友好)。见 数据类型ES6+

测量

  • Performance APIperformance.mark / measure
  • Chrome DevTools:PerformanceMemoryCoverage
  • 以数据验证优化,避免过早优化。

相关链接