FumadocsZDecode
工程化

前端运维

简介

前端运维(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 等

On this page