Shopify 性能优化

Shopify 用 web-vitals 上报却收不到数据

现象#

接入 web-vitals 后自建接口一条记录都没有,Network 里 sendBeacon 返回 204 但服务端日志为空。

原因#

  • 指标回调在页面隐藏时才触发,用户直接关标签或前端路由跳转会漏掉最后一次
  • sendBeacon 发 Blob 未声明 type,服务端按表单解析导致读到空 body
  • 上报域跨域且未处理 OPTIONS 预检,信标被静默丢弃
  • 采集脚本在 DOMContentLoaded 之后才执行,onLCP 还没注册页面就结束了

处理步骤#

  1. 先用 onLCP(console.log, { reportAllChanges: true }) 在控制台确认能拿到值
  2. 上报改用 sendBeacon 发 Blob,type 设 application/json
  3. 在 visibilitychange 变为 hidden 时补发一次,兜住提前关闭的会话
  4. 服务端从 POST body 读取,不要按 query string 取参数
  5. 用 Network 面板按 beacon 类型过滤,确认请求确实带着 payload 发出

验收标准#

服务端 24 小时内收到覆盖 5% 以上 UV 的样本,能按模板算出各自的 p75 LCP。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。