L(onLoad)
当依赖的资源全部加载完毕之后才会触发
TTI(Time to Interactive)
可交互时间,用于标记应用已进入视觉渲染并能可靠响应用户输入的时间点
FID(First Input Delay)
首次输入延迟,用户首次和页面交互(单击链接、点击按钮等)到页面响应交互的时间
3.1.2.2 指标求解
上述这么多指标该怎么获取呢?浏览器给我们留了相应的接口——神奇的window.performance,通过该接口可以获取一些列与性能相关的参数,下面以https://baidu.com 为例来看一下与这些指标相关的参数:
文章插图
window.performance中的timing属性中的内容不就是为了求解上述指标所需要的值吗?看着上面的属性值再对应下面的performance访问流程图,整个过程是不是一目了然 。
文章插图
有了上面的值我们就一起求解上述的指标:一、网络层面
计算
重定向耗时
redirectEnd - redirectStart
DNS解析耗时
domainLookupEnd - domainLookupStart
TCP连接耗时
connectEnd - connectStart
SSL连接耗时
connectEnd - secureConnectionStart
TTFB 网络请求耗时
responseStart - requestStart
数据传输耗时
responseEnd - responseStart
资源加载耗时
loadEventStart - domContentLoadedEventEnd
二、页面展示层面
Google工程师一直在推动以用户为中心的性能指标,所以页面展示层面的变化较大,求解方式稍有不同:
- FP和FCP
window.performance.getEntriesByType(‘paint’)的方式获取
const paint = window.performance.getEntriesByType('paint');const FP = paint[0].startTime,const FCP = paint[1].startTime,
- LCP
function getLCP() {// 增加一个性能条目的观察者new PerformanceObserver((entryList, observer) => {let entries = entryList.getEntries();const lastEntry = entries[entries.length - 1];observer.disconnect();console.log('LCP', lastEntry.renderTime || lastEntry.loadTime);}).observe({entryTypes: ['largest-contentful-paint']});}
- FMP
function getFMP() {let FMP;new PerformanceObserver((entryList, observer) => {let entries = entryList.getEntries();observer.disconnect();console.log('FMP', entries);}).observe({entryTypes: ['element']});}
- DCL
domContentLoadEventEnd – fetchStart
- L
loadEventStart – fetchStart
- TTI
domInteractive – fetchStart
- FID
function getFID() {new PerformanceObserver((entryList, observer) => {let firstInput = entryList.getEntries()[0];if (firstInput) {const FID = firstInput.processingStart - firstInput.startTime;console.log('FID', FID);}observer.disconnect();}).observe({type: 'first-input', buffered: true});}
3.1.3 异常信息对于网站来说,异常信息是最致命、最影响用户体验的问题,需要重点监控 。对于异常信息可以分为两类:运行时错误、接口错误 。下面就分别来唠一唠这两类错误 。一、运行时错误
当JAVAScript运行时有可能会发生错误,可归类为七种:语法错误、类型错误、范围错误、引用错误、eval错误、URL错误、资源加载错误 。为了捕获代码错误,需要考虑两类场景:非Promise场景和Promise场景,因为两种场景捕获错误的策略不同 。1.非Promise场景
非Promise场景可通过监听error事件来捕获错误 。对于error事件捕获的错误分为两类:资源错误和代码错误 。资源错误指的就是js、css、img等未加载,该错误只能在捕获阶段获取到,且为资源错误时event.target.localName存在值(用此区分资源错误与代码错误);代码错误指的就是语法错误、类型错误等这一类错误,可以获取代码错误的信息、堆栈等,用于排查错误 。
export function listenerError() {window.addEventListener('error', (event) => {if (event.target.localName) {console.log('这是资源错误', event);}else {console.log('这是代码错误', event);}}, true)}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 生肖|2022年,鸿运高照,职场机遇多,前景可观,前程似锦的三大生肖
- 工程建筑|基建狂魔再获“神装” 世界第一台!桩梁一体造桥机“共工号”投用
- 长城物业管理策略
- 红茶之回味,功夫红茶能泡多久
- 奥运会|谷爱凌不排除再战冬奥:依然热爱滑雪
- 职业教育|HR直言:不招“三无学生”,成绩再优秀也不要,击碎毕业生的心
- 翡翠|翡翠新手不知道怎么选翡翠?5大要素带你入门
- 王者s26赛季更新时间是何时?
- 2022年支付宝集五福什么时候开始?
- 翡翠|新手买到喜欢的翡翠,主要是对它不够了解,不知道怎么鉴定价格