You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
在官方文档中找到了如下描述: First Idle is the first early sign of time where the main thread has come at rest and the browser has completed a First Meaningful Paint.
Time to Interactive is after First Meaningful Paint. The browser’s main thread has been at rest for at least 5 seconds and there are no long tasks that will prevent immediate response to user input.
Long Tasks API 可以将任何耗时超过 50 毫秒的任务标示为可能存在问题,并向应用开发者显示这些任务。 选择 50 毫秒的时间是为了让应用满足在 100 毫秒内响应用户输入的 RAIL 指导原则。
实际开发过程中,我们可以通过一个 hack 来检查页面中「长任务」的代码:
// detect long tasks hack
(function detectLongFrame() {
let lastFrameTime = Date.now();
requestAnimationFrame(function() {
let currentFrameTime = Date.now();
if (currentFrameTime - lastFrameTime > 50) {
// Report long frame here...
}
detectLongFrame(currentFrameTime);
});
}());
四、如何计算 TTI?
在计算之前,我们先来看一下 Timing API:
Google` 官方文档中有一段描述:
`Note: Lower Bounding FirstInteractive at DOMContentLoadedEnd DOMContentLoadedEnd is the point where all the DOMContentLoaded listeners finish executing. It is very rare for critical event listeners of a webpage to be installed before this point. Some of the firstInteractive definitions we experimented with fired too early for a small number of sites, because the definitions only looked at long tasks and network activity (and not at, say, how many event listeners are installed), and sometimes when there are no long tasks in the first 5-10 seconds of loading we fire FirstInteractive at FMP, when the sites are often not ready yet to handle user inputs. We found that if we take max(DOMContentLoadedEnd, firstInteractive) as the final firstInteractive value, the values returned to reasonable region. Waiting for DOMContentLoadedEnd to declare FirstInteractive is sensible, so all the definitions introduced below lower bound firstInteractive at DOMContentLoadedEnd.
The domContentLoadedEventEnd attribute MUST return a DOMHighResTimeStamp with a time value equal to the time immediately after the current document's DOMContentLoaded event completes.
import ttiPolyfill from './path/to/tti-polyfill.js';
ttiPolyfill.getFirstConsistentlyInteractive(opts).then((tti) => {
// Use `tti` value in some way.
});
常见web 性能指标
如果你经常做网站优化,可能会陷入一个性能指标的泥潭即「面向指标优化」。真正的用户体验从来不是指标决定,相反它应该最真实的反映用户行为。
所以本节我们就来研究
TTI(Time to Interactive)
,话题展开之前,我们先来了解一些背景知识。一、RAIL 模型
RAIL
是一种以用户为中心的性能模型。每个网络应用均具有与其生命周期有关的四个不同方面,且这些方面以不同的方式影响着性能:1.响应:输入延迟时间(从点按到绘制)小于 100 毫秒。
用户点按按钮(例如打开导航)。
2.动画:每个帧的工作(从 JS 到绘制)完成时间小于 16 毫秒。
用户滚动页面,拖动手指(例如,打开菜单)或看到动画。 拖动时,应用的响应与手指位置有关(例如,拉动刷新、滑动轮播)。 此指标仅适用于拖动的持续阶段,不适用于开始阶段。
3.空闲:主线程 JS 工作分成不大于 50 毫秒的块。
用户没有与页面交互,但主线程应足够用于处理下一个用户输入。
4.加载:页面可以在 1000 毫秒内就绪。
用户加载页面并看到关键路径内容。
如果要提升网站用户体验,[RAIL](Measure performance with the RAIL model) 是个不错的评估模型。
二、解读 TTI(页面可交互时间)
TTI(页面可交互时间)度量标准衡量页面在用户可以与之交互之前所花费的时间,即页面对点击做出响应之前的时间。这取决于何时:
页面显示有用的内容(由第一个有内容的绘图确定)
页面上最可见的内容是交互式的(可单击或响应鼠标悬停时,等等)
页面在最长 50 毫秒内响应用户交互
在实践中,用于计算TTI的算法同时观察瀑布和网络活动。确定互动时间的三个阶段是:
选择一个相关的起点,例如第一个
Contentful Paint
或domcontentloadended
;从这一点出发,寻找一个网络稳定 5 秒的窗口(不包含长任务);
一旦发现了这一点,回顾最后一个长任务的结束,并将该时间报告为“交互时间”。
这意味着在文档分析完成之前不可能估计 TTI。要了解
TTI
,我们需要知道它的计算规则,先来看下面这张图:在官方文档中找到了如下描述:
First Idle is the first early sign of time where the main thread has come at rest and the browser has completed a First Meaningful Paint.
我们可以简单的理解一下:
1.
First Idle
是主线程处于静止状态且浏览器已完成First Meanfulful Paint
的第一个早期迹象;2.
TTI
在FMP
之后,浏览器主线程静止至少5s
,并且没有可以阻断用户交互响应的「长任务」。如果你对
FMP
还不了解,不妨先看看这篇文章:网站性能指标 -FMP
。除此之外,第二条中提到的「长任务」又是什么呢?三、Long Task(长任务)
对于「长任务」,我们通过如下图示说明:
对于用户而言,任务耗时较长表现为滞后或卡顿,而这也是目前网页不良体验的主要根源。
如何测量
Long Task
?控制台输出结果如下:
Long Tasks API
可以将任何耗时超过50
毫秒的任务标示为可能存在问题,并向应用开发者显示这些任务。 选择50
毫秒的时间是为了让应用满足在100
毫秒内响应用户输入的RAIL
指导原则。实际开发过程中,我们可以通过一个
hack
来检查页面中「长任务」的代码:四、如何计算 TTI?
在计算之前,我们先来看一下
Timing API
:所以,我们可以通过
domContentLoadedEventEnd
来粗略的进行估算:domContentLoadedEventEnd:文档的 DOMContentLoaded 事件的结束时间。
如果你觉得上述计算过于复杂,可以通过
Google
实验室提供的Polyfill
来获取。五、TTI 指标监控
我们可以通过
Google TTI Polyfill
来对TTI
进行监测。1.安装
2.使用
Other Resources
Measure performance with the RAIL model
First Interactive and Consistently Interactive
User-centric performance metrics
Focusing on the Human-Centric Metrics
Navigation Timing Level 2
以用户为中心的性能指标【译】
Understand and improve the Time To Interactive
让你的网页更丝滑(一)
火山引擎-页面加载
The text was updated successfully, but these errors were encountered: