用这 9 个 API,我把页面性能干到了 90+

news/2026/1/20 16:23:59/文章来源:https://www.cnblogs.com/smileZAZ/p/19507379

🧑‍💻 写在开头

点赞 + 收藏 === 学会🤣🤣🤣

最近项目上线,用户一多,页面就卡得不行。首屏加载 3 秒起,滚动掉帧,手机发烫……被 QA 喊去聊了好几次。

没办法,只能低头研究性能优化。翻了一圈文档和实战案例,发现现代浏览器其实给了我们很多“外挂”——那些你可能听过但一直没用起来的高级 API。

真正用上去之后,页面流畅度提升非常明显。今天就来分享我在项目中实测有效的 9 个 API,每一个都带来了实实在在的性能提升。

1. IntersectionObserver:懒加载的终极方案

以前做图片懒加载,都是监听 scroll 事件,手动判断元素位置。结果就是:一滚动,页面卡成 PPT。

后来改用 IntersectionObserver,直接交给浏览器去监听:

// 创建一个观察器实例
// entries 是所有被观察元素的状态集合
const observer = new IntersectionObserver((entries) => {entries.forEach(entry => {// 判断元素是否进入视口(可见)if (entry.isIntersecting) {const img = entry.target; // 获取当前图片元素// 将 data-src 中的真实图片地址赋给 src,开始加载img.src = img.dataset.src;// 加载完成后,停止观察,避免重复触发observer.unobserve(img);}});
});// 找到所有带有 data-src 的图片(懒加载图片)
document.querySelectorAll('img[data-src]').forEach(img => {// 让观察器开始监听每个图片observer.observe(img);
});

效果:首屏加载时间直接砍掉 40%,滚动丝滑,CPU 占用也降了。

关键是没有重排重绘,完全是浏览器层面的优化,比手动监听 scroll 强太多。


2. requestIdleCallback:把非关键任务丢到空闲时执行

有些事不着急,比如上报埋点、预加载下一页数据、清理缓存。但放在主线程里,总怕影响用户体验。

requestIdleCallback 就是干这个的——告诉浏览器:“等你空了再执行”。

// 浏览器会在主线程空闲时执行这个回调
// 不会阻塞高优先级任务(如渲染、用户输入)
requestIdleCallback(() => {// 发送用户行为埋点sendAnalytics();// 预加载下一页可能需要的资源preloadNextPage();
});

它不会抢占主线程,适合处理低优先级任务。用了之后,页面交互明显更跟手了。


3. requestAnimationFrame:动画就该这么写

以前用 setTimeout 做动画,总感觉卡卡的,还容易掉帧。

换成 requestAnimationFrame 后,动画终于和屏幕刷新率同步了:


function animate() {// 更新元素位置element.style.transform = `translateX(${x}px)`;// 如果还没到目标位置,继续下一帧动画if (x < 200) {requestAnimationFrame(animate);}
}
// 启动动画
requestAnimationFrame(animate);

优势

  • 自动适配 60fps / 120fps 屏幕
  • 页面不可见时自动暂停,省电
  • setTimeout 更精准

动画类交互都建议换成这个。


4. ResizeObserver:监听元素尺寸变化

想监听某个 div 的宽高变化?别再用 window.resize + getBoundingClientRect 了,又慢又不准。

ResizeObserver 可以精确监听任意元素的尺寸变化:

const observer = new ResizeObserver(entries => {// entries 包含所有被观察元素的尺寸信息entries.forEach(entry => {// entry.contentRect 包含元素的宽高、位置等console.log('新尺寸:', entry.contentRect);// 可以在这里调整子元素布局或重绘图表});
});// 开始监听指定元素
observer.observe(document.getElementById('chart-container'));

特别适合图表、自适应容器这类组件,再也不用手动触发 resize 事件了。


5. performance.now():精准测量性能

Date.now() 精度不够,还可能被系统时间干扰。

performance.now() 是高精度时间戳,适合测量函数执行时间:

// 获取当前高精度时间(毫秒,精确到微秒)
const start = performance.now();// 执行一个耗时操作
heavyCalculation();// 再次获取时间
const end = performance.now();// 计算耗时,结果非常精确
console.log(`耗时: ${end - start}ms`);

配合 performance.mark() 和 measure(),还能做更复杂的性能分析。


6. preload 和 prefetch:资源预加载

preload:关键资源,立刻加载

<!-- 告诉浏览器:这个 CSS 很重要,马上就要用,优先加载 -->
<link rel="preload" href="critical.css" as="style"><!-- 预加载字体文件,避免文字闪动 -->
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>

用于首屏必须用到的资源,浏览器会优先加载,提升首屏速度。

prefetch:未来可能用到的资源

<!-- 告诉浏览器:用户可能会访问下一页,空闲时预加载这个 JS -->
<link rel="prefetch" href="/user/profile.js">

在空闲时预加载下一页的 JS 或数据,实现“秒开”跳转。

这两个配合使用,体验提升非常明显。


7. Cache API + Service Worker:让页面离线可用

PWA 的核心就是缓存。用 Cache API,可以把静态资源存到客户端:

// service-worker.js
self.addEventListener('fetch', event => {// 拦截网络请求event.respondWith(// 先在缓存中查找是否有匹配的请求caches.match(event.request).then(cached => {// 如果缓存中有,直接返回缓存内容// 否则发起网络请求return cached || fetch(event.request);}));
});

第一次访问正常加载,第二次直接从缓存读,速度快到飞起。

而且即使断网,核心页面也能打开,用户体验直接拉满。


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);
};

主线程再也不卡了,用户可以正常操作页面,处理完再通知前端。


9. document.visibilityState:页面不可见时节省资源

用户切到别的标签页,页面还在疯狂发请求、跑动画?太浪费了。

用 visibilityState 判断页面是否激活:

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 → 节流优化

每一个都能在特定场景下带来显著提升。建议从 IntersectionObserverpreload 开始,逐步引入,效果立竿见影。

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1189766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕设】Python房屋信息可视化及价格预测系统

&#x1f49f;博主&#xff1a;程序员小俊&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

2026超级学长国际课程:多维度提升国际升学竞争力 - 品牌排行榜

随着国际化教育趋势的不断发展,越来越多的学生选择通过系统的国际课程提升学术能力与语言水平,为海外升学奠定基础。超级学长国际课程作为涵盖多类考试培训与学术先修的综合课程体系,整合了语言能力提升、标准化考试…

强烈安利10个AI论文平台,本科生搞定毕业论文!

强烈安利10个AI论文平台&#xff0c;本科生搞定毕业论文&#xff01; AI 工具让论文写作不再难 在当今这个信息爆炸的时代&#xff0c;本科生撰写毕业论文早已不再是简单的“写文章”任务&#xff0c;而是涉及选题、调研、数据分析、逻辑构建等多个环节的系统工程。面对繁重的学…

主流金属键盘厂家有哪些?最新口碑与实力分析报告,附5家主流企业服务模式与适配场景详解 - 速递信息

本文核心结论1、规模不等于敏捷:年营收超10亿的头部大厂,其标准产品线或无法满足高度定制化需求,小规模但聚焦的金属键盘厂家,在非标项目响应速度上可能更具优势。2、“全链条”能力是交期与良率的压舱石:具备从模…

2026 年靠谱地坪漆厂家全解析细分需求与真实案例 筛选避坑指南 - 深度智识库

当下工业生产、商业运营和仓储物流领域对地坪的实用性要求越来越高,2025 年行业调研数据显示,工业厂房地坪翻新需求年增速达 18%,车库、商业空间对地坪的耐磨、环保、定制化需求也在持续提升。很多企业在选择地坪漆…

2026年1月阻垢剂阻垢剂厂家最新实力榜:反渗透阻垢剂/锅炉阻垢剂/缓蚀阻垢剂精选 - 深度智识库

全球阻垢剂市场预计将从2024年的约2588百万美元增长至2031年的3099百万美元,年复合增长率约为2.6%。反渗透系统是目前最大的应用领域,占据约37.39%的市场份额。 01 行业现状与选购核心维度 当前水处理化学品行业正经…

2026年辣味零食推荐,辣味零食挑选指南及选购建议 - Top品牌推荐

辣味零食凭借独特的味觉冲击力,成为不少人日常解馋、聚会分享的首选。从经典辣条到创新辣味单品,市场上的辣味零食层出不穷,涵盖不同口感、辣度与场景需求。本次推荐聚焦国民品牌与网红爆款,兼顾口感、品质与实用性…

导师严选2026最新!9款一键生成论文工具测评:本科生毕业论文全攻略

导师严选2026最新&#xff01;9款一键生成论文工具测评&#xff1a;本科生毕业论文全攻略 2026年学术写作工具测评&#xff1a;精准选择&#xff0c;高效完成毕业论文 随着人工智能技术的快速发展&#xff0c;越来越多的本科生开始借助AI工具提升论文写作效率。然而&#xff0c…

Spring全家桶面试工作重点精简汇总!

Spring可以说是我们Java入门时最先接触的框架了&#xff0c;只要你是Java程序员&#xff0c;它就是你绕不开必须要学习的一个点。对于我们这些有工作经验的Javaer来说&#xff0c;你不仅要学好Spring&#xff0c;还需要学好后续由它衍生一系列的框架组件&#xff08;我们一般把…

终究还是学了SpringBoot ,Java我又双敪来了

https://www.jetbrains.com/zh-cn/help/idea/spring-support-tutorial.html#create-repo 看IDEA自带的教程,更清新! AI的起点是代码!活到老,学到老。

天津超级学长怎么样?2026天津语言培训口碑与课程解析 - 品牌排行榜

在天津,随着留学及国际教育需求的增长,雅思、托福等语言标化考试及国际课程培训受到广泛关注。选择合适的培训机构成为许多学生和家长的重要考量,课程质量、师资力量、教学效果等都是关注的重点。该类机构通常涵盖丰…

【毕业设计】Python房屋信息可视化及价格预测系统

&#x1f49f;博主&#xff1a;程序员陈辰&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

2025年山东靠谱的花灯生产厂家哪家权威,景区灯会/国风花灯/春节国潮花灯/华景花灯/天幕花灯/拱门花灯/春节花灯批发厂家排行榜 - 品牌推荐师

随着文旅融合的深入与夜游经济的蓬勃发展,水上花灯作为兼具视觉震撼力与文化沉浸感的载体,正成为众多景区、城市公园及商业综合体打造差异化体验的首选。市场的旺盛需求,也催生了对专业、可靠花灯定制厂家的迫切寻找…

哈尔滨雅思培训中心学校选课指南推荐:2026 靠谱机构口碑排名与深度测评 - 老周说教育

在哈尔滨南岗区、道里区、香坊区等核心城区,雅思培训市场呈现多元化态势,但考生在选课过程中面临诸多痛点:基础薄弱者找不到精准提分技巧,高分冲刺者缺乏权威个性化方案,留学迷茫党纠结教育机构的靠谱性与留学衔接…

【毕业设计】基于Django框架的多媒体资料管理系统的设计与实现

&#x1f49f;博主&#xff1a;程序员陈辰&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

2026年锦昊网络外贸推广十大公司排名,靠谱之选大盘点 - 工业品牌热点

2026年数字化营销浪潮席卷全域,AI驱动的搜索优化与精准外贸推广已成为泰州本土制造业、工厂企业突破市场边界的核心抓手。无论是抢占AI问答平台曝光的AI-GEO技术,还是打通海外获客链路的外贸专项服务,优质服务商的本…

2025年市面上评价好的门窗品牌怎么选择,节能门窗/旧窗换新/被动式窗/旧房改造/家居装修/整体门窗实力厂家有哪些 - 品牌推荐师

随着消费者对居住品质要求的提升,门窗行业正从单一功能向系统化、智能化方向迭代。2025年,市场对门窗产品的需求呈现三大趋势:节能环保需求激增、定制化服务成为标配、智能化技术加速渗透。然而,行业集中度低、品牌…

2026超级学长Alevel脱产课程:备考规划与学习路径 - 品牌排行榜

Alevel课程作为全球广泛认可的国际高中课程体系,其成绩是申请海外顶尖大学的重要依据。脱产学习模式因能提供集中化、系统化的备考环境,成为许多希望高效提升成绩学生的选择。对于目标明确、需在短期内突破Alevel成绩…

亲测好用8个AI论文软件,专科生轻松搞定毕业论文!

亲测好用8个AI论文软件&#xff0c;专科生轻松搞定毕业论文&#xff01; AI 工具助你轻松应对论文写作难题 在当今信息化快速发展的时代&#xff0c;AI 技术已经渗透到各个领域&#xff0c;学术写作也不例外。对于专科生来说&#xff0c;毕业论文的撰写往往是一个既复杂又令人焦…

【OpenCV 核心算子全详解】-图像文件读写(能力检查、数量统计、内存编解码、文件读写、iOS 格式转换)

OpenCV 图像读写及格式转换算子详解 目录 图像读写能力检查函数 1.1 cv::haveImageReader 1.2 cv::haveImageWriter图像数量统计函数 2.1 cv::imcount内存缓冲区图像编解码函数 3.1 cv::imdecode&#xff08;返回Mat版&#xff09; 3.2 cv::imdecode&#xff08;输出参数版&…