当前位置: 首页 > article >正文

如何计算H5页面加载时的白屏时间

计算 H5 页面加载时的 白屏时间(First Paint Time)是前端性能优化的重要指标,通常指从用户发起页面请求到浏览器首次渲染像素(如背景色、文字等)的时间。以下是几种常用的计算方法:


1. 使用 Performance API(推荐)

现代浏览器提供的 Performance API 可以精确获取页面加载的关键时间点:

// 计算白屏时间(First Paint)
const whiteScreenTime = performance.timing.responseEnd - performance.timing.navigationStart;// 或者使用更精确的 PerformancePaintTiming(需浏览器支持)
performance.getEntriesByType('paint').forEach((entry) => {if (entry.name === 'first-paint') {console.log('白屏时间(First Paint):', entry.startTime, 'ms');}
});

关键指标:

  • navigationStart:页面开始导航的时间。
  • responseEnd:浏览器接收到最后一个字节的时间。
  • first-paint(PerformancePaintTiming):浏览器首次渲染非空白内容的时间。

2. 使用 MutationObserver 监听 DOM 变化

如果目标浏览器不支持 Performance API,可以通过监听 DOM 变化来估算白屏时间:

document.addEventListener('DOMContentLoaded', () => {const startTime = Date.now();const observer = new MutationObserver(() => {// 当检测到 DOM 变化时,认为页面开始渲染const whiteScreenTime = Date.now() - startTime;console.log('估算白屏时间:', whiteScreenTime, 'ms');observer.disconnect(); // 停止监听});observer.observe(document, { childList: true, subtree: true });
});

适用场景:
兼容性较好,但精度较低(受 JS 执行影响)。


3. 使用 Chrome DevTools 手动测量

  1. 打开 Chrome 开发者工具(F12)。
  2. 切换到 Performance 面板。
  3. 点击 Reload 按钮录制页面加载过程。
  4. 在结果中查找 First PaintFP 时间。

4. 使用 Lighthouse 自动化测试

运行 Lighthouse(Chrome 内置工具)生成性能报告:

# 命令行方式(需安装 Lighthouse)
lighthouse https://example.com --view --output=json --output-path=./report.json

报告中的 First Contentful Paint (FCP) 近似白屏时间。


关键优化建议

  1. 减少关键资源(CSS/JS)体积:压缩、异步加载非必要脚本。
  2. 内联关键 CSS:避免渲染阻塞。
  3. 预加载关键资源:使用 <link rel="preload">
  4. 服务端渲染(SSR):加快首屏渲染。

总结

方法适用场景精度
Performance API现代浏览器⭐⭐⭐⭐⭐
MutationObserver兼容旧浏览器⭐⭐
Chrome DevTools手动调试⭐⭐⭐
Lighthouse自动化测试⭐⭐⭐⭐

推荐优先使用 Performance API,并结合 Lighthouse 进行优化验证。

http://www.lryc.cn/news/2398820.html

相关文章:

  • SpringAI系列 - MCP篇(三) - MCP Client Boot Starter
  • 【深度学习新浪潮】以Dify为例的大模型平台的对比分析
  • Asp.net core 使用EntityFrame Work
  • isp中的 ISO代表什么意思
  • AI Coding 资讯 2025-06-03
  • 2024年12月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 3d GIS数据来源与编辑工具
  • NeRF PyTorch 源码解读 - 体渲染
  • SpringBoot 数据库批量导入导出 Xlsx文件的导入与导出 全量导出 数据库导出表格 数据处理 外部数据
  • 解决:install via Git URL失败的问题
  • OpenCV CUDA模块特征检测------创建Harris角点检测器的GPU实现接口cv::cuda::createHarrisCorner
  • 【氮化镓】钝化层对p-GaN HEMT阈值电压的影响
  • C++:优先级队列
  • 睡眠分期 html
  • Java求职者面试:Spring、Spring Boot、Spring MVC与MyBatis技术深度解析
  • Github 2025-05-29 Go开源项目日报Top9
  • 前端项目种对某个文件夹进行大小写更改,git识别不到差异导致无变化
  • AWS VPC 网络详解:理解云上专属内网的关键要素
  • Ubuntu24.04.2 + kubectl1.33.1 + containerdv1.7.27 + calicov3.30.0
  • 循环神经网络(RNN)全面教程:从原理到实践
  • uniapp 键盘顶起页面问题
  • 利用TOA与最小二乘法直接求解
  • SpringBoot系列之RabbitMQ 实现订单超时未支付自动关闭功能
  • 【C++高级主题】命令空间(五):类、命名空间和作用域
  • ArcGIS Pro 3.4 二次开发 - 地图创作 1
  • 2.1HarmonyOS NEXT开发工具链进阶:DevEco Studio深度实践
  • MyBatis常用注解全解析:从基础CRUD到高级映射
  • 国标GB28181设备管理软件EasyGBS视频平台筑牢文物保护安全防线创新方案
  • 十二、【核心功能篇】测试用例列表与搜索:高效展示和查找海量用例
  • Baklib内容中台AI重构智能服务