Lighthouse TBT指标高到10秒,怎么优化才能降到2秒以下? Prog.琪帆 提问于 2026-01-25 22:34:22 阅读 20 工具 我在开发一个React单页应用时,Lighthouse评分突然显示TBT指标飙到了10秒多,用户反馈页面确实有明显卡顿。之前尝试把非必要JS改成懒加载,但TBT还是没降下来,这是为什么啊? 用开发者工具看了下main.js有300多KB,但已经用webpack做了代码分割。Lighthouse报告里显示有三个超过50ms的任务集中在5秒左右,跟图片加载有关?改用webp格式后反而更差了… 现在完全不知道该怎么入手优化了,总不能让用户等这么久吧?有遇到过类似情况的前辈给点具体建议吗? TBT指标 我来解答 赞 8 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 UI亚楠 Lv1 TBT高主要是因为主线程被长时间占用,图片加载只是诱因,真正的问题大概率是JS执行阻塞了渲染。直接这样:把耗时的JS任务用 requestIdleCallback 或者 setTimeout 拆成小块异步执行,别一股脑全塞在初始化里。 另外,300多KB的main.js还是太大了,代码分割可能没做好。检查一下webpack配置,确保动态导入写法是 import() 而不是打包成了静态依赖。图片这块可以用懒加载,别一次性加载所有图片,推荐用 loading="lazy" 属性或者第三方库比如 lozad.js。 // 示例:拆分耗时任务 function processInChunks(taskList) { taskList.forEach((task, index) => { setTimeout(() => { task(); }, index * 100); // 分散执行 }); } // 示例:图片懒加载 最后,记得用Lighthouse再跑一遍,确认优化效果,别瞎折腾。 回复 点赞 2026-02-17 04:05 UX-克培 Lv1 TBT高到10秒确实有点夸张,但也不是不能解决。你已经做了懒加载和代码分割,这是对的,不过还得再深入优化一下。 首先,300多KB的main.js虽然做了代码分割,但还是太大了。建议用 webpack-bundle-analyzer 看看里面具体哪些库或代码占了大头,没用的部分直接砍掉或者替换成更轻量的。另外,确保开启了Gzip或者Brotli压缩,这个能显著减少JS文件大小。 然后是那三个超过50ms的任务,既然跟图片加载有关,可能是因为图片尺寸过大或者解码耗时太长。别急着换格式,先试试这几招: 1. 用 image-set 或者 srcset 提供适配不同设备的图片尺寸。 2. 图片懒加载一定要做好,确保只加载视口内的图片。 3. 如果浏览器支持,可以用 loading="lazy" 属性。 关于WebP,有些老浏览器不支持确实会导致问题,可以试试Modernizr之类的工具做条件加载,支持WebP的用WebP,不支持的用JPEG。 最后别忘了看看CSS动画或者布局有没有引起重排,这个也可能是TBT高的原因。如果用了第三方库,尽量避免那些会触发大量DOM操作的。 简单总结:进一步减小JS体积、优化图片加载逻辑、检查CSS和动画影响。按这些步骤来,降到2秒以下应该没问题。 回复 点赞 8 2026-01-29 14:25 加载更多 相关推荐 1 回答 10 浏览 为什么优化了代码后Lighthouse的TTI指标还是卡在11秒以上? 我在优化一个单页应用时,Lighthouse的TTI一直显示11秒多,明明把JS拆分成了动态导入,还压缩了图片。但测试报告里显示"largest-contentful-paint"还是在首屏阻塞渲染,... 宝玲 工具 2026-02-16 08:49:27 2 回答 39 浏览 Lighthouse SEO检测中,为什么所有文本必须可访问才能通过? 在优化项目SEO时,Lighthouse报「确保所有文本都是可访问的」错误,但我的页面文本都正常显示。我检查了的alt属性和ARIA标签都没问题,这是怎么回事? 尝试过把文字改成包裹并加aria-la... Top丶永伟 工具 2026-02-16 21:46:24 1 回答 24 浏览 Lighthouse提示”优化流程”分数低,动态加载的JS脚本还是导致阻塞渲染怎么办? 我在React项目里用useEffect动态加载第三方统计脚本,虽然用了defer属性,但Lighthouse还是显示这个标签造成了渲染阻塞。代码是这样的: useEffect(() => { ... 轩辕建杰 工具 2026-02-01 16:21:24 1 回答 7 浏览 Lighthouse Node API运行后性能评分一直是undefined怎么办? 我在用Lighthouse Node API跑性能测试时,获取的performance评分总是undefined,但其他指标正常。代码是这样写的: const lighthouse = require... 皇甫明阳 工具 2026-02-17 16:29:22 2 回答 48 浏览 Lighthouse性能评分优化后反而下降了,哪里出问题? 我给网站压缩了图片,移除了没用的JS代码,按理说性能应该更好,但Lighthouse评分从85直接掉到72,这是为啥? 之前优化时做了这些:img标签加了loading="lazy",把多个CSS文件... 萌新.嘉倪 工具 2026-02-09 22:18:28 1 回答 28 浏览 Lighthouse生成报告后内容全是空白怎么办? 在用Chrome开发者工具跑Lighthouse评分时,生成的报告页面全是空白,但之前能正常出结果。试过清除浏览器缓存、重启浏览器,甚至重装Chrome都没用。 用控制台看报错显示:Uncaught ... Top丶心虹 工具 2026-02-04 13:14:22 2 回答 106 浏览 为什么在Lighthouse测试中首屏加载时间反而变长了? 最近在给项目做性能优化,把公共代码抽离成vendor chunk,还给图片加了懒加载,但Lighthouse测出来的首屏时间反而从2秒变成3秒了。明明控制台Network里总下载量少了200kb,这是... Mr-文华 前端 2026-02-04 09:56:31 1 回答 48 浏览 为什么我的页面TTI指标一直卡在8秒以上?优化后没明显改善 最近在优化一个电商详情页,Lighthouse评分里的TTI指标总是在8秒左右,用户反馈页面加载卡顿。页面用了Vue组件,图片都加了懒加载,还把CSS抽离成单独文件了,但测试结果还是差。折腾了半天,发... 长孙晓曼 工具 2026-01-29 21:27:28 2 回答 44 浏览 Lighthouse Node API运行时报“No URL specified”该怎么解决? 我在用Lighthouse的Node API写自动化测试脚本时,按照文档初始化了配置对象,但运行时报错ERROR No URL specified。明明在代码里设置了url参数,这是为什么? 代码是这... a'ゞ文雯 工具 2026-01-28 05:33:23 1 回答 27 浏览 为什么我的PWA在Lighthouse评分中无法获得满分的“安装”分数? 我在开发一个电商类PWA应用,已经添加了manifest和service worker,但Lighthouse的“安装”评分始终只能拿到75分。明明检查了manifest里的name、short_na... Top丶宇轩 工具 2026-02-11 21:52:28
requestIdleCallback或者setTimeout拆成小块异步执行,别一股脑全塞在初始化里。另外,300多KB的main.js还是太大了,代码分割可能没做好。检查一下webpack配置,确保动态导入写法是
import()而不是打包成了静态依赖。图片这块可以用懒加载,别一次性加载所有图片,推荐用loading="lazy"属性或者第三方库比如lozad.js。最后,记得用Lighthouse再跑一遍,确认优化效果,别瞎折腾。
首先,300多KB的main.js虽然做了代码分割,但还是太大了。建议用
webpack-bundle-analyzer看看里面具体哪些库或代码占了大头,没用的部分直接砍掉或者替换成更轻量的。另外,确保开启了Gzip或者Brotli压缩,这个能显著减少JS文件大小。然后是那三个超过50ms的任务,既然跟图片加载有关,可能是因为图片尺寸过大或者解码耗时太长。别急着换格式,先试试这几招:
1. 用
image-set或者srcset提供适配不同设备的图片尺寸。2. 图片懒加载一定要做好,确保只加载视口内的图片。
3. 如果浏览器支持,可以用
loading="lazy"属性。关于WebP,有些老浏览器不支持确实会导致问题,可以试试Modernizr之类的工具做条件加载,支持WebP的用WebP,不支持的用JPEG。
最后别忘了看看CSS动画或者布局有没有引起重排,这个也可能是TBT高的原因。如果用了第三方库,尽量避免那些会触发大量DOM操作的。
简单总结:进一步减小JS体积、优化图片加载逻辑、检查CSS和动画影响。按这些步骤来,降到2秒以下应该没问题。