Shopify INP 差因主线程长任务
现象#
点击加购、切换变体后要等一两秒才有反应,INP 超过 500 毫秒,但页面加载分数看起来正常。
原因#
- 变体切换时同步重排整个商品区,一次性写入大量 DOM
- 第三方应用脚本在点击事件里做同步计算或网络请求
- 图片轮播库在初始化时遍历所有图片并绑定事件
- 事件处理函数里调用了
localStorage与JSON.parse处理大对象
处理步骤#
- 用 Chrome 性能面板录制一次点击,找超过 50ms 的长任务与对应的调用栈
- 把变体切换的 DOM 更新拆成「先更新价格与图,再异步更新库存与推荐」两步
- 对非关键逻辑用
requestIdleCallback或setTimeout(..., 0)让出主线程 - 检查应用脚本是否在点击回调里同步请求,改为先给即时反馈再异步提交
- 用
PerformanceObserver监听event类型的durationThreshold: 100,上线后持续观察
验收标准#
主要交互的 INP 降到 200 毫秒以内;性能面板中点击后的长任务被拆成多个小于 50ms 的片段。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。