async 和 defer 到底该怎么用才不影响首屏加载? A. 诗雅 提问于 2026-03-05 23:16:21 阅读 4 优化 我在优化首屏加载时,把第三方统计脚本加了 async,但发现有时候页面渲染还是被卡住,是不是我用错了? 之前试过这样写: <script src="analytics.js" async></script> 但 Lighthouse 报告里还是提示“阻塞渲染资源”,难道 async 不是不阻塞 HTML 解析吗?那 defer 会不会更好? 我来解答 赞 4 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 Code°智玲 Lv1 这个问题我也踩过坑,async和defer的差异确实容易搞混。先说结论:第三方统计脚本最好用defer而不是async,原因我慢慢解释。 首先澄清下概念: - async是下载不阻塞HTML解析,但执行时会阻塞渲染 - defer是下载和执行都等到HTML解析完才进行 你遇到的阻塞问题就是因为统计脚本用了async,当它下载完时会立即执行,这时候如果执行时间长就会卡住页面。改成这样就好: <script src="analytics.js" defer></script> 安全提醒:如果是第三方脚本,一定要考虑注入风险。建议加上crossorigin="anonymous"防止注入,像这样: <script src="analytics.js" defer crossorigin="anonymous"></script> 实际项目中我都是这样处理的: 1. 关键渲染路径的脚本用defer 2. 完全不重要的第三方脚本用async(比如广告) 3. 统计类这种中等重要性的脚本也用defer Lighthouse那个提示是因为它把任何脚本都算作阻塞资源,即使用defer也会提示,但实际对首屏影响很小。 回复 点赞 2026-03-05 23:20 加载更多 相关推荐
defer而不是async,原因我慢慢解释。首先澄清下概念:
-
async是下载不阻塞HTML解析,但执行时会阻塞渲染-
defer是下载和执行都等到HTML解析完才进行你遇到的阻塞问题就是因为统计脚本用了
async,当它下载完时会立即执行,这时候如果执行时间长就会卡住页面。改成这样就好:安全提醒:如果是第三方脚本,一定要考虑注入风险。建议加上
crossorigin="anonymous"防止注入,像这样:实际项目中我都是这样处理的:
1. 关键渲染路径的脚本用
defer2. 完全不重要的第三方脚本用
async(比如广告)3. 统计类这种中等重要性的脚本也用
deferLighthouse那个提示是因为它把任何脚本都算作阻塞资源,即使用
defer也会提示,但实际对首屏影响很小。