啥是FID
首次输入延迟。衡量负载响应能力,数值越低页面交互体验越好。
FCP是衡量网站加载速度的开始,剩下的交互也很重要。
用户第一次和页面交互
- 点击链接
- 点击按钮
- 自定义js空间
- 输入
解决什么问题
鼓励异步响应事件,让主线程不要那么忙碌。
用户如果是主线程最繁忙时候,和空闲时候,FID值是不同的。
和滚动无关。
为啥值考虑 first第一个输入?
因为它早,第一印象,鼓励异步拆分。
这个值说明什么问题
哪些元素会受到主线程影响:
- 文本字段,复选框和单选按钮(
<input>
,<textarea>
) - 选择下拉菜单(
<select>
) - 链接(
<a>
)
如果浏览器主线程忙于操作其他任务,会导致输入延迟,无法及时响应用户。FID会高。
如果用户自始至终都没有上述操作,那就是没有值。操作或早或晚,值也有高有低。
一个糟糕的 FID 主要原因是JS执行过长,优化JS的解析、编译、执行可以直接降低 FID。
拆分代码、分解长任务 可以降低用户输入延迟。
长任务指的是用户可能会发现页面无响应的时期执行的js代码。任何阻塞主线程大于等于50ms的代码都是长任务。长任务一般是js体积过大的潜在因素(浏览器加载并执行了比页面初始化所需要的更多的js)。
如何计算
最简单方法是使用web-vitals
手动计算的话,也是使用 PerformanceObserver ,监听的type是 first-input
一般建议75%,但这个指标建议观察 95% - 99%
比如我们要承诺 99% 的用户都要小于 5 秒,我们看页面加载时长时候就应该看 99 分位数。如果我们现在精力不够,我们只能承诺 50% 的人页面加载时长小于 5 秒,实际上 50 分位数,就是中位数,就是 50% 的访问能够不小于这个时间打开这个页面。
其他优化,后续在补充。
不能在lab中测算,可以参考 TBT
参考资料
- Google 文档https://web.dev/fid/
- 知乎系列专栏 https://zhuanlan.zhihu.com/p/187604948