ZDecode
Frontend

前端运维

简介

前端运维(Front-end Operations,俗称“前端可观测性”)中的白屏检测、错误日志上报

白屏检测

白屏一般指用户打开页面但没有正常渲染内容,常见原因包括 JS 加载失败、接口卡住、资源加载慢等。

常用检测方式:

  1. 采集首屏关键节点 比如通过定时器检测页面上是否有关键 DOM 出现:
setTimeout(() => {
  const hasContent = document.querySelector('#app')?.children.length > 0;
  if (!hasContent) {
    reportWhiteScreen(); // 上报白屏
  }
}, 3000);
  1. 通过 Performance API 检测资源加载
window.addEventListener('load', () => {
  const entries = performance.getEntriesByType('resource');
  const hasScript = entries.some(e => e.initiatorType === 'script');
  if (!hasScript) {
    reportWhiteScreen('No JS Loaded');
  }
});
  1. 打点检测视觉区域是否有实际内容

取几个固定点,判断这些点上是否都是背景色:

function isWhiteScreen() {
  const points = [0.1, 0.3, 0.5, 0.7, 0.9].map(scale => {
    return document.elementFromPoint(window.innerWidth * scale, window.innerHeight * scale);
  });
  return points.every(el => !el || el.tagName === 'HTML' || el.tagName === 'BODY');
}

错误日志上报

用于自动捕捉页面异常和用户行为,便于调试与告警。

常见类型:

类型描述
JS 异常window.onerror / window.addEventListener('error')
Promise 未处理异常unhandledrejection 事件
资源加载失败img.onload, img.onerror
自定义打点接口失败、埋点事件等

常用工具或平台:

  1. Sentry(推荐) 支持 SourceMap,自动捕捉异常和堆栈信息

  2. Fundebug / logRocket / 阿里 ARMS / 腾讯 TSW

  3. 自建上报平台

    异常捕捉后,通过 navigator.sendBeacon()AJAX 上报到日志服务

window.onerror = function (msg, url, line, col, error) {
  sendToServer({
    type: 'js-error',
    msg,
    url,
    line,
    col,
    stack: error?.stack
  });
};
window.addEventListener('unhandledrejection', event => {
  sendToServer({
    type: 'promise-error',
    reason: event.reason
  });
});

Raven.js / @sentry/browser

简介

是 Sentry 官方的 JS SDK(老版本),用于前端异常捕捉和上报

功能:

  • 捕捉错误、Promise 异常

  • 自动处理 SourceMap

  • 上报用户信息、标签、环境变量等

现在已被新的 SDK(@sentry/browser)替代:

import * as Sentry from '@sentry/browser';

Sentry.init({
  dsn: 'https://xxx@xxx.ingest.sentry.io/xxx',
  tracesSampleRate: 1.0,
});

补充:

除了上面提到的白屏和错误监控,还包括:

  • 页面性能监控(FCP、TTI、LCP、CLS)

  • 接口响应时间、失败率

  • 用户行为回放(如 logRocket)

  • 网络请求分析(慢接口、失败接口)

  • 资源加载分析(JS、CSS、图片等)

总结

名称用途
白屏检测判断页面是否空白未加载成功
错误日志上报捕捉 JS / Promise / 网络等错误
Raven.js / Sentry前端错误监控平台
相关平台工具Sentry, 阿里 ARMS, 腾讯 TSW, Fundebug 等