前端监控sdk

错误采集

性能监控

插件化架构

sendBeacon + Fetch fallback 双通道上报 解决页面卸载时数据丢失;基于IndexedDB实现离线队列支持弱网重传

集成rrweb实现会话录制,针对SPA路由切换导致的DOM快照断裂问题,设计EventsMatrix二维时间片存储方案,配合History API劫持,实现路由变化时主动触发快照更新;

基于tsup构建输出ESM/CJS/UMD多格式,核心模块与rrweb插件分离打包,核心 < 10KB,完整版含录制约65KB;

白屏检测方案

通过在页面上选取多个采样点,使用 document.elementFromPoint(x,y) 获取每个坐标点上的最顶层DOM元素,然后判断这些元素是否为“空白”容器(如根节点 div#app、body、html等),从而判断页面是否白屏

字段设计:

字段含义
isWhiteScreentrue判定为白屏
totalPoints10总共采样了 10 个点
whiteScreenCount10其中 10 个点 命中了白屏元素
threshold7白屏判定阈值为 7(≥7 个点命中即判定白屏)
whiteScreenRatio"100.00%"白屏比例为 100%

整个方案的工作流程如下:

function detectWhiteScreen() {
  // 1. 定义采样点坐标(通常基于屏幕宽高的比例分布)
  const points = generateSamplePoints(totalPoints); // 10个点

  // 2. 定义"白屏元素"的选择器(命中这些元素视为空白)
  const whiteSelectors = ['html', 'body', 'div#app', 'div#root'];

  // 3. 遍历每个采样点,获取最顶层元素
  let whiteScreenCount = 0;
  points.forEach(({ x, y }) => {
    const element = document.elementFromPoint(x, y);
    const selector = getElementSelector(element); // 如 "div#app"
    if (whiteSelectors.includes(selector)) {
      whiteScreenCount++;
    }
  });

  // 4. 与阈值比较,判定是否白屏
  const isWhiteScreen = whiteScreenCount >= threshold; // threshold = 7

  // 5. 输出结果
  return {
    isWhiteScreen,          // true
    totalPoints,            // 10
    whiteScreenCount,       // 10
    threshold,              // 7
    whiteScreenRatio: (whiteScreenCount / totalPoints * 100).toFixed(2) + '%'
  };
}

这种方案的优势在于轻量、无侵入,不依赖截图或 Canvas,纯 DOM 操作即可完成检测,适合集成到前端监控 SDK 中作为页面可用性的兜底检测。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇