首屏进度条必须基于真实资源加载数据,使用PerformanceObserver监听resource和paint类型事件,结合FCP与关键资源加载耗时计算进度,避免用load事件或模拟方案;CSS实现需用transform: scaleX()、fixed定位与visibility控制,并注意节流更新和关键资源筛选。

首屏加载条不是靠“遮罩+定时器”模拟出来的,真要反映真实加载进度,必须结合资源加载生命周期;纯 CSS 动画条或 setTimeout 模拟的,对用户体验反而有害——它既不准确,又干扰真实性能感知。
怎么用 PerformanceObserver 监听首屏关键资源加载
浏览器原生支持资源加载耗时上报,PerformanceObserver 是唯一能拿到 navigation、resource、paint 等真实指标的 API。首屏进度条的核心依据是:从导航开始到 first-contentful-paint(FCP)或关键资源(如首屏图片、CSS)加载完成的时间占比。
- 监听
paint类型可捕获first-paint和first-contentful-paint时间点,但无法反映 JS/CSS 加载阻塞 - 监听
resource类型能拿到每个、<script></script>、的startTime和duration,适合计算“已加载关键资源耗时 / 预估总关键资源耗时” - 不要监听
navigation后立刻启动进度条——navigationStart之前可能已有 DNS 查询、TCP 连接等,需用performance.getEntriesByType('navigation')[0]获取完整时间戳
为什么不能只靠 window.addEventListener('load')
load 事件触发太晚,等所有子资源(包括广告、埋点脚本、非首屏图片)都加载完才触发,此时用户早已看到内容,进度条还在动会引发困惑甚至误判性能差。
-
load不区分资源优先级,一个 5MB 的后台轮询 JS 会拖慢整个进度条结束时间 - 现代页面大量使用
loading="lazy"或动态import(),它们不参与load事件时机判断 - 真正该停的时机是:首屏 DOM 渲染完成 + 关键样式/脚本就绪,即
document.readyState === 'interactive'且performance.getEntriesByType('paint').find(p => p.name === 'first-contentful-paint')已存在
如何用 CSS 实现平滑、不闪跳的顶部进度条
用 标签或 div + transform: scaleX() 都可以,但关键在「不触发重排、不阻塞渲染、不随滚动偏移」。
- 进度条容器必须设
position: fixed; top: 0; left: 0; width: 100%; height: 2px; z-index: 9999;,避免被其他fixed元素(如导航栏)遮挡 - 内部进度条推荐用
transform: scaleX()而非修改width,前者是合成层操作,不触发 layout/paint - 不要用
opacity控制显隐——首次加载时若 DOM 尚未 ready,opacity: 0会导致布局塌陷;改用visibility: hidden+height: 0,并在DOMContentLoaded后设为visibility: visible - 加个简单过渡:
transition: transform 200ms ease-out;,但别用cubic-bezier(0.4, 0, 0.2, 1)这类过度拟物的缓动,它会让进度在末段明显变慢,用户感知为“卡住”
真实项目中容易被忽略的三个细节
进度条本身不该成为性能瓶颈,但很多实现悄悄引入了反模式:
- 在
PerformanceObserver回调里直接操作 DOM 更新进度 —— 应节流,比如用requestIdleCallback或至少throttle到 60fps 以内(即每 16ms 最多更新一次) - 把所有
都当作关键资源统计 —— 实际只需监控带有data-critical属性或位于视口内的前 3 张图,否则懒加载图会拉低进度值 - 服务端开启 HTTP/2 推送后,
performance.getEntriesByType('resource')可能漏掉被推送的资源 —— 此时需 fallback 到监听document.fonts.ready和CSSStyleSheet.cssRules加载状态
进度条的价值不在“看起来快”,而在暴露真实瓶颈。如果 FCP 已达 800ms 还在动,说明得去查 blocking CSS 或过早执行的 JS,而不是给进度条加个更炫的动画。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











