性能指标

436 阅读1分钟

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

TIP 👉 英雄者,胸怀大志,腹有良策,有包藏宇宙之机,吞吐天地之志者也。——《三国演义》

前言

前端性能指标****

前置知识

白屏时间 FP****

指的是当我输入URL开始,到页面开始有变化,只要有任意像素点变化,都算是白屏时间的完结。(根据图片显示)

function getFP() {
    new PerformanceObserver((entryList, observer) => {
        let enties = entryList.getEntries();
        console.log(entries);
        for (let i = 0; i < entries.length; i++) {
            if (entries[i].name === 'first-paint') {
                console.log'FP', entries[i].startTime);
            }
        }
        const lastEntry = entries[entries.length - 1];
        // observer.disconnect();
    }).observe({entryTypes: [ 'paint']});
};

⾸次内容绘制FCP 1. 指的是页面上绘制了第一个元素。 FP与FCP的最大的区别就在于:FP 指的是绘制像素,比如说页面的背景色是灰色的,那么在显示灰色背景时就记录下了 FP 指标。但是此时 DOM 内容还没开始绘制,可能需要文件下载、解析等过程,只有当 DOM 内容发生变化才会触发,比如说渲染出了一段文字,此时就会记录下 FCP 指标。因此说我们可以把这两个指标认为是和白屏时间相关的指标,所以肯定是最快越好。

function getFP() {
    new PerformanceObserver((entryList, observer) => { 
        let entries = entryList.getEntries(); console.log(entries);
        for (let i = 0; i < entries.length; i++) {
            if (entries[i].name === 'first-contentful-paint'){ 
                console.log('FCP', entries[i].startTime);
            }
        }
        const lastEntry = entries[entries.length - 1];
        // observer.disconnect();
    }).observe({entryTypes: ['paint']});
};

首次有效绘制 FMP****

这个东西具有一定的争议性,他指的是页面中有效内容绘制,对于每个网站对于有效内容的定义是不同的,   因此一般不做研究。

首页时间****

首页时间指的是,当onload事件触发的时候,也就是整个首页加载完成的时候

function getFirstPage() {
    console.log('FIRSTPAGE', (performance.timing.loadEventEnd - performance.timing.fetchStart));
};

最大内容绘制 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']});
}

首次可交互时间 TTI****

需要满足以下条件:

1. 从 FCP 指标后开始计算

2. 持续 5 秒内无长任务(执行时间超过 50 ms)且无两个以上正在进行中的 GET 请求

3. 往前回溯至 5 秒前的最后一个长任务结束的时间

function getTTI() {
    let time = performance.timing.domInteractive - performance.timing.fetchStart;
    console.log('TTI', time);
};

1. 首次输入延迟(FID): 记录在 FCP 和 TTI 之间用户首次与页面交互时响应的延迟。

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});
}

「欢迎在评论区讨论」

希望看完的朋友可以给个赞,鼓励一下