Firefox 中 Pace.js 进度条卡在 99% 的解决方案

作者:袖梨 2026-08-08

Pace.js 在 Firefox 中常因默认启用的事件延迟检测(eventLag)导致进度条长时间停滞在 99%,关闭该选项即可显著提升加载响应速度。

Pace.js 在 Firefox 中常因默认启用的事件延迟检测(eventLag)导致进度条长时间停滞在 99%,关闭该选项即可显著提升加载响应速度。

Pace.js 是一款轻量级、自动化的页面加载进度条库,通过监听 DOM 变化、资源加载和 AJAX 请求来估算加载进度。但在 Firefox 浏览器中,部分用户反馈进度条在达到 99% 后明显“卡住”,需等待数秒才跳转至 100% 并完成加载——而 Chrome 等浏览器则表现正常。

根本原因在于 Pace.js 默认开启的 eventLag 检测机制:它会周期性地向事件循环注入微任务(如 setTimeout),并通过测量两次执行的时间间隔来判断主线程是否繁忙(即是否存在事件滞后)。然而,Firefox 的事件循环调度与 Chrome 存在差异,尤其在页面初始化阶段,该检测可能因高频率轮询或计时器精度问题产生显著延迟,进而误导 Pace 的进度计算逻辑,使其迟迟无法判定“加载完成”。

✅ 解决方案非常简洁:禁用 eventLag 检测。只需在 Pace 初始化配置中显式设置 "eventLag": false

// 推荐:在引入 pace.js 后、自动启动前配置window.paceOptions = {eventLag: false, // 关键修复项restartOnPushState: true,restartOnRequestAfter: false,ajax: true,document: true,elements: false};

注意事项:

  1. eventLag: false 不会影响 Pace 的核心功能(如资源加载、DOM 就绪等进度判断),仅关闭基于事件循环延迟的启发式估算;
  2. 若项目依赖 eventLag 来应对极端卡顿场景(如长任务阻塞),可保留该选项并配合 restartOnRequestAfter 或自定义 progress 钩子进行精细化控制;
  3. 建议将 Pace 配置置于 <script> 标签中,且必须在 pace.js 脚本加载之前或 window.paceOptions 全局变量定义之后立即设置,否则可能被默认配置覆盖。

总结:Firefox 下 Pace.js 卡 99% 是一个已知兼容性问题,根源在于 eventLag 的跨浏览器行为差异。关闭该选项是安全、高效且被广泛验证的解决方案,能立即恢复流畅的加载体验,无需修改 Pace 源码或引入额外 polyfill。

相关文章

精彩推荐