最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PerformanceObserver自動獲取首屏?xí)r間實(shí)現(xiàn)示例

 更新時間:2022年07月05日 11:33:01   作者:陽光是sunny  
今天給大家介紹一個非常好用的瀏覽器api:?PerformanceObserver?,?我們可以用它來獲取首屏、白屏的時間,就不用再麻煩地手動去計(jì)算了

介紹

PerformanceObserver 可用于獲取性能相關(guān)的數(shù)據(jù),例如首幀fp、首屏fcp首次有意義的繪制 fmp等等。

構(gòu)造函數(shù)

PerformanceObserver() 創(chuàng)建并返回一個新的 PerformanceObserver 對象。

提供的方法

PerformanceObserver.observe()

當(dāng)記錄的性能指標(biāo)在指定的 entryTypes 之中時,將調(diào)用性能觀察器的回調(diào)函數(shù)。

PerformanceObserver.disconnect()

停止性能觀察者回調(diào)接收到性能指標(biāo)。

PerformanceObserver.takeRecords()

返回存儲在性能觀察器中的性能指標(biāo)的列表,并將其清空。

重點(diǎn)我們看看observer.observe(options);

options

一個只裝了單個鍵值對的對象,該鍵值對的鍵名規(guī)定為 entryTypes。entryTypes 的取值要求如下:

entryTypes 的值:一個放字符串的數(shù)組,字符串的有效值取值在性能條目類型 中有詳細(xì)列出。如果其中的某個字符串取的值無效,瀏覽器會自動忽略它。

另:若未傳入 options 實(shí)參,或傳入的 options 實(shí)參為空數(shù)組,會拋出 TypeError。

實(shí)例

<script>
	const observer = new PerformanceObserver((list) => {
		for(const entry of list.getEntries()){
			console.groupCollapsed(entry.name);
			console.log(entry.entryType);
			console.log(entry.startTime);
			console.log(entry.duration);
			console.groupEnd(entry.name);
		}
	})	
	observer.observe({entryTypes:['longtask','frame','navigation','resource','mark','measure','paint']});
</script>

獲取結(jié)果

根據(jù)打印結(jié)果我們可以推測出來:

entryTypes里的值其實(shí)就是我們告訴PerformanceObserver,我們想要獲取的某一方面的性能值。例如傳入paint,就是說我們想要得到fcp和fp。

所以我們看打印,它打印出來了fp和fcp

這里有必要解釋一下什么是fp,fcp,fpm

TTFB:Time To First Byte,首字節(jié)時間

FP:First Paint,首次繪制,繪制Body

FCP:First Contentful Paint,首次有內(nèi)容的繪制,第一個dom元素繪制完成

FMP:First Meaningful Paint,首次有意義的繪制

TTI:Time To Interactive,可交互時間,整個內(nèi)容渲染完成

不懂?看圖!

FP僅有一個div根節(jié)點(diǎn)

FCP包含頁面的基本框架,但沒有數(shù)據(jù)內(nèi)容

FMP包含頁面的所有元素及數(shù)據(jù)

Wow!恍然大悟!

實(shí)際使用

好了,我們在實(shí)際項(xiàng)目中怎么取獲取呢?可以看看我的實(shí)現(xiàn)參考一下下:

  // 使用 PerformanceObserver 監(jiān)聽 fcp
  if (!!PerformanceObserver){
    try {
      const type = 'paint';
      if ((PerformanceObserver.supportedEntryTypes || []).includes(type)) {
        observer = new PerformanceObserver((entryList)=&gt;{
          for(const entry of entryList.getEntriesByName('first-contentful-paint')){
            const { startTime } = entry;
            console.log('[assets-load-monitor] PerformanceObserver fcp:', startTime);
            // 上報(bào)startTime操作
          }
        });
        observer.observe({
          entryTypes: [type],
        });
        return;
      }
    } catch (e) {
      // ios 不支持這種entryTypes,會報(bào)錯 https://caniuse.com/?search=PerformancePaintTiming
      console.warn('[assets-load-monitor] PerformanceObserver error:', (e || {}).message ? e.message : e);
    }
  }

這里用了判斷是否可以使用PerformanceObserver,不能使用的話,我們是用其他方法的,例如MutationObserver,這個我們我們后面再講。

參考:

https://developer.mozilla.org/zh-CN/docs/Web/API/PerformanceObserver/observe

http://www.fzitv.net/article/95836.htm

以上就是PerformanceObserver獲取首屏?xí)r間實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于PerformanceObserver首屏?xí)r間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

右玉县| 武清区| 潮安县| 武邑县| 锡林浩特市| 开原市| 即墨市| 讷河市| 萝北县| 油尖旺区| 英吉沙县| 辽宁省| 白水县| 公安县| 寿光市| 东乌| 津南区| 龙州县| 通化市| 泸西县| 友谊县| 道孚县| 大连市| 赤水市| 土默特右旗| 乐清市| 江达县| 吴江市| 会理县| 襄汾县| 云霄县| 乐至县| 昌吉市| 虹口区| 恩施市| 铁岭市| 会昌县| 浦县| 克什克腾旗| 益阳市| 青铜峡市|