标准答案

  1. 先定义事件模型:事件名、触发时机、页面上下文、业务对象、结果状态和必要的性能字段。
  2. 只采集能支持分析和排查的字段,不采集密码、token、完整手机号、身份证、完整输入内容等敏感数据。
  3. 上报要尽量异步、批量、低优先级,页面卸载时可以使用 sendBeacon。
  4. 埋点 SDK 要有采样、队列、失败重试、离线缓存上限和降级策略,避免阻塞主流程。
  5. 需要区分曝光、点击、提交、成功、失败、重试等事件,并保持命名规范稳定。

题目解析

这道题考的是工程边界。埋点不是到处 console 或随手请求一个接口,而是一套数据契约。

性能风险主要来自同步计算、频繁上报、大 payload 和阻塞主线程;隐私风险主要来自采集过度和字段未脱敏。

好的埋点应该能回答业务问题,也能帮助定位错误,同时不破坏用户体验。

代码示例

页面关闭或跳转时,sendBeacon 适合做低阻塞上报。

JavaScript
function reportEvent(event) {
  const payload = JSON.stringify(sanitizeEvent(event))

  if (navigator.sendBeacon) {
    navigator.sendBeacon('/analytics', payload)
    return
  }

  fetch('/analytics', {
    method: 'POST',
    body: payload,
    keepalive: true
  })
}

常见误区

  • 把用户输入、token、邮箱、手机号等敏感信息原样上报。
  • 每次点击都立即发请求,没有批量、采样和队列控制。
  • 事件名和字段没有规范,后续数据分析无法稳定复用。

作者信息