接上在线客服之后 INP 从 180 毫秒涨到 700 毫秒 录 Performance 能看到一个外域脚本连续执行了 3 秒 标签明明写了 async 也没用。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,async 只保证下载不阻塞 HTML 解析 脚本一到就立刻执行 客服初始化时会全量拉会话列表再渲染面板 这段时间主线程完全被占住。

「第三方脚本阻塞」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。报错里带路径的,先去看那个路径在不在、权限对不对。

addEventListener('load', () => {
  const s = document.createElement('script');
  s.src = 'https://chat.example.com/w.js';
  document.body.appendChild(s);
});

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,改成点击客服图标之后再动态插入脚本 首屏完全不加载它;确实需要预加载的话就放到 load 事件之后 再用 requestIdleCallback 找空闲插进去;给它准备固定宽高的占位 div 面板弹出时不会推挤页面。

最后用这个标准收尾,首屏加载阶段主线程没有长任务 点开客服图标后面板仍能正常弹出。

作者 9823189