FID指标很高,是不是因为CSS阻塞了交互?
最近用Lighthouse测性能,发现FID(首次输入延迟)经常超过300ms。页面其实没多少JS,但有个全屏加载动画是用CSS写的,会不会是这个导致主线程被占用了?我试过把动画移到DOMContentLoaded之后再加class,但FID还是很高。
这是那个动画的CSS:
.loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #fff;
z-index: 9999;
animation: fadeOut 1.2s forwards;
}
@keyframes fadeOut {
to { opacity: 0; visibility: hidden; }
}
这种纯CSS动画真的会影响FID吗?还是我忽略了其他问题?
首先建议把
z-index: 9999;降到合理的值,比如 10 或 20 就够了。这么高的层级会强制浏览器重排,影响性能。另外,fadeOut 动画持续1.2秒太长了,建议缩短到300ms以内。可以试试这样:
更好的写法是用 prefers-reduced-motion 媒体查询来照顾那些对动画敏感的用户:
别忘了检查一下有没有其他地方阻塞了渲染,比如字体加载、图片解码之类的。FID高的话,八成还是有JS在偷偷捣鬼。用performance工具看看主线程的火焰图,找找看是不是某个脚本在拖后腿。