第一次访问正常加载,第二次直接从缓存读,速度快到飞起。
而且即使断网,核心页面也能打开,用户体验直接拉满。
8. Web Workers:把重任务移出主线程
项目里有个功能要处理上万条数据,一执行页面就卡死。
后来用 Web Workers 把计算放到后台线程:
// main.js - 主线程
// 创建一个 Web Worker,运行 worker.js 文件
const worker = new Worker('worker.js');
// 发送数据给 Worker
worker.postMessage(data);
// 监听 Worker 的返回结果
worker.onmessage = (e) => {
console.log('处理完成:', e.data);
};
// worker.js - 后台线程
// 监听来自主线程的消息
self.onmessage = function(e) {
// 执行耗时的数据处理
const result = heavyProcess(e.data);
// 将结果返回给主线程
self.postMessage(result);
};
document.addEventListener('visibilitychange', () => {
// visibilityState 的值可能是:
// 'visible':页面在前台
// 'hidden':页面在后台(最小化、切标签)
if (document.visibilityState === 'hidden') {
// 页面不可见时,暂停视频播放
stopVideo();
// 停止定时轮询接口
stopPolling();
} else {
// 页面回到前台,恢复视频播放
resumeVideo();
}
});
页面不可见时暂停轮询、视频、动画,回来再恢复。省电、省流量、省服务器压力。
总结
这 9 个 API 不是“炫技”,而是真正在解决性能问题:
IntersectionObserver → 懒加载
requestIdleCallback → 空闲任务
requestAnimationFrame → 流畅动画
ResizeObserver → 尺寸监听
performance.now() → 性能测量
preload/prefetch → 资源预加载
Cache API → 离线缓存
Web Workers → 后台计算
visibilityState → 节流优化
每一个都能在特定场景下带来显著提升。建议从 IntersectionObserver 和 preload 开始,逐步引入,效果立竿见影。
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。