日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

如何有效監(jiān)測網(wǎng)頁靜態(tài)資源大小?

來源: 責(zé)編: 時(shí)間:2024-04-24 17:35:34 194觀看
導(dǎo)讀前言作為前端人員肯定經(jīng)常遇到這樣的場景:需求剛上線,產(chǎn)品拿著手機(jī)來找你,為什么頁面打開這么慢呀,心想自己開發(fā)的時(shí)候也有注意性能問題呀,不可能會(huì)這么夸張。那沒辦法只能排查下是哪一塊影響了頁面的整體性能,打開瀏覽器控

前言

作為前端人員肯定經(jīng)常遇到這樣的場景:需求剛上線,產(chǎn)品拿著手機(jī)來找你,為什么頁面打開這么慢呀,心想自己開發(fā)的時(shí)候也有注意性能問題呀,不可能會(huì)這么夸張。那沒辦法只能排查下是哪一塊影響了頁面的整體性能,打開瀏覽器控制臺(tái)一看,頁面上的這些配圖每張都非常大,心想這些配圖都這么大,頁面怎么快,那么我們有沒有辦法監(jiān)測頁面上的這些靜態(tài)資源大小,從而避免這種情況的發(fā)生。lZN28資訊網(wǎng)——每日最新資訊28at.com

Performance

Performance 接口可以獲取到當(dāng)前頁面中與性能相關(guān)的信息。lZN28資訊網(wǎng)——每日最新資訊28at.com

該對象提供許多屬性及方法可以用來測量頁面性能,這里介紹幾個(gè)用來獲取PerformanceEntry的方法:lZN28資訊網(wǎng)——每日最新資訊28at.com

getEntries

該方法獲取一組當(dāng)前頁面已經(jīng)加載的資源PerformanceEntry對象。接收一個(gè)可選的參數(shù)options進(jìn)行過濾,options支持的屬性有name,entryType,initiatorType。lZN28資訊網(wǎng)——每日最新資訊28at.com

const entries = window.performance.getEntries();

getEntriesByName

該方法返回一個(gè)給定名稱和 name 和 type 屬性的PerformanceEntry對象數(shù)組,name的取值對應(yīng)到資源數(shù)據(jù)中的name字段,type取值對應(yīng)到資源數(shù)據(jù)中的entryType字段。lZN28資訊網(wǎng)——每日最新資訊28at.com

const entries = window.performance.getEntriesByName(name, type);

getEntriesByType

該方法返回當(dāng)前存在于給定類型的性能時(shí)間線中的對象PerformanceEntry對象數(shù)組。type取值對應(yīng)到資源數(shù)據(jù)中的entryType字段。lZN28資訊網(wǎng)——每日最新資訊28at.com

const entries = window.performance.getEntriesByType(type);

嘗試獲取靜態(tài)資源數(shù)據(jù)

使用getEntriesByType獲取指定類型的性能數(shù)據(jù),performance entryType中有一個(gè)值為resource,用來獲取文檔中資源的計(jì)時(shí)信息。該類型包括有:script、link、img、css、xmlhttprequest、beacon、fetch、other等。lZN28資訊網(wǎng)——每日最新資訊28at.com

const resource = performance.getEntriesByType('resource')console.log('resource', resource)

這樣可以獲取到非常多關(guān)于資源加載的數(shù)據(jù):lZN28資訊網(wǎng)——每日最新資訊28at.com

lZN28資訊網(wǎng)——每日最新資訊28at.com

為了方便查看,我們來稍微處理下數(shù)據(jù)lZN28資訊網(wǎng)——每日最新資訊28at.com

const resourceList = []const resource = performance.getEntriesByType('resource')console.log('resource', resource)resource.forEach((item) => {  resourceList.push({    type: item.initiatorType, // 資源類型    name: item.name, // 資源名稱    loadTime: `${(item.duration / 1000).toFixed(3)}s`, // 資源加載時(shí)間    size: `${(item.transferSize / 1024).toFixed(0)}kb`, // 資源大小  })})

lZN28資訊網(wǎng)——每日最新資訊28at.com

這樣對于每個(gè)資源的類型、名稱、加載時(shí)長以及大小,都非常清晰lZN28資訊網(wǎng)——每日最新資訊28at.com

但是有些資源的大小為什么會(huì)是0呢?以及還有很多頁面上的資源貌似沒有統(tǒng)計(jì)到,這是為啥呢?lZN28資訊網(wǎng)——每日最新資訊28at.com

這是因?yàn)轫撁嫔系馁Y源請求并不是一次性加載完的,比如一些資源的懶加載,這里就有可能會(huì)統(tǒng)計(jì)不到,或者資源大小統(tǒng)計(jì)會(huì)有問題,所以我們需要監(jiān)聽資源的動(dòng)態(tài)加載。lZN28資訊網(wǎng)——每日最新資訊28at.com

監(jiān)聽資源加載

以上介紹的3個(gè)API都無法做到對資源動(dòng)態(tài)加載的監(jiān)聽,這里就需要用到PerformanceObserver來處理動(dòng)態(tài)加載的資源了lZN28資訊網(wǎng)——每日最新資訊28at.com

PerformanceObserver

PerformanceObserver 主要用于監(jiān)測性能度量事件,在瀏覽器的性能時(shí)間軸記錄新的 performanceEntry 時(shí)會(huì)被通知。lZN28資訊網(wǎng)——每日最新資訊28at.com

通過使用 PerformanceObserver() 構(gòu)造函數(shù)我們可以創(chuàng)建并返回一個(gè)新的 PerformanceObserver 對象,從而進(jìn)行性能的監(jiān)測。lZN28資訊網(wǎng)——每日最新資訊28at.com

用法

PerformanceObserver 與其它幾個(gè) Observer 類似,使用前需要先進(jìn)行實(shí)例化,然后使用 observe 監(jiān)聽相應(yīng)的事件。lZN28資訊網(wǎng)——每日最新資訊28at.com

function perf_observer(list, observer) {  // ...}var observer = new PerformanceObserver(perf_observer);observer.observe({ entryTypes: ["resource"] });

它主要有以下實(shí)例方法:lZN28資訊網(wǎng)——每日最新資訊28at.com

  • observe:指定監(jiān)測的 entry types的集合。當(dāng) performance entry 被記錄并且是指定的 entryTypes 之一的時(shí)候,性能觀察者對象的回調(diào)函數(shù)會(huì)被調(diào)用。
  • disconnect:性能監(jiān)測回調(diào)停止接收PerformanceEntry。
  • takeRecords:返回當(dāng)前存儲(chǔ)在性能觀察器的 performance entry列表,并將其清空。

嘗試獲取頁面圖片加載信息

new PerformanceObserver((list) => {  list    .getEntries()    .filter(    (entry) =>    entry.initiatorType === 'img' || entry.initiatorType === 'css',  )    .forEach((entry) => {    resourceList.push({      name: entry.name, // 資源名稱      loadTime: `${(entry.duration / 1000).toFixed(3)}s`, // 資源加載時(shí)間      type: entry.initiatorType, // 資源類型      size: `${(entry.transferSize / 1024).toFixed(0)}kb`, // 資源大小    })    console.log('--', resourceList)  })}).observe({ entryTypes: ['resource'] })

這里需要注意的是,獲取類型除了img還得加上css,因?yàn)镃SS中可能會(huì)有通過url()加載的背景圖。lZN28資訊網(wǎng)——每日最新資訊28at.com

lZN28資訊網(wǎng)——每日最新資訊28at.com

這樣,頁面上的圖片大小以及加載時(shí)長一目了然了lZN28資訊網(wǎng)——每日最新資訊28at.com

通知

我們自己是知道問題了,但是還需要將這些信息推送給產(chǎn)品及運(yùn)營,這個(gè)可以通過企業(yè)微信提供的API來進(jìn)行操作,不滿足條件的資源將進(jìn)行推送通知:lZN28資訊網(wǎng)——每日最新資訊28at.com

setTimeout(() => {  axios.get('http://127.0.0.1:3000/jjapi/user/pushMessage', {    params: {      msgtype: 'markdown',      markdown: {        content: `          <font color="warning">H5項(xiàng)目資源加載異常,請注意查看</font>          類型:<font color="comment">圖片資源大小超出限制</font>          異常數(shù)量:<font color="comment">${resourceList.length}例</font>           異常列表:<font color="comment">${resourceList.map(            (item) => item.name,          )}</font>`,      },    },  })}, 8000)

通知如下:lZN28資訊網(wǎng)——每日最新資訊28at.com

lZN28資訊網(wǎng)——每日最新資訊28at.com

這里為了避免跨域,使用nest自己包了一層,這樣就能夠及時(shí)發(fā)現(xiàn)線上配置資源是否有問題,并且這個(gè)腳本也不需要所有用戶都執(zhí)行,因?yàn)榇蠹业馁Y源都是一樣的,只需要配置特定白名單(比如開發(fā)、測試、產(chǎn)品),在頁面上線后,在進(jìn)行線上回歸的同時(shí)執(zhí)行該腳本去監(jiān)測上線配置資源是否都合理...lZN28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-85234-0.html如何有效監(jiān)測網(wǎng)頁靜態(tài)資源大小?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 過多的全局變量帶來的弊端與解決之道

下一篇: 效率工具:Readwise Reader和Arc瀏覽器新功能介紹

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • 0糖0卡0脂 旭日森林仙草烏龍茶優(yōu)惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時(shí)要賣為79.9元,今日下單領(lǐng)取50元優(yōu)惠券,到手價(jià)為29.9元。產(chǎn)品規(guī)格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • SpringBoot中使用Cache提升接口性能詳解

    環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應(yīng)用程序提供了透明式添加緩存的支持。和事務(wù)支持一樣,抽象緩存允許一致地使用各
  • 之家push系統(tǒng)迭代之路

    前言在這個(gè)信息爆炸的互聯(lián)網(wǎng)時(shí)代,能夠及時(shí)準(zhǔn)確獲取信息是當(dāng)今社會(huì)要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動(dòng)拉"獲取信息的方式已不能滿足用
  • 重估百度丨“晚熟”的百度云,能等到春天嗎?

    &copy;自象限原創(chuàng)作者|程心排版|王喻可2016年7月13日,百度云計(jì)算戰(zhàn)略發(fā)布會(huì)在北京舉行,宣告著百度智能云的正式啟程。彼時(shí)的會(huì)場座無虛席,甚至排隊(duì)排到了門外,在場的所有人幾乎都
  • 慕巖炮轟抖音,百合網(wǎng)今何在?

    來源:價(jià)值研究所 作者:Hernanderz&ldquo;難道就因?yàn)樽约旱囊粋€(gè)產(chǎn)品牛逼了,從客服到總裁,都不愿意正視自己產(chǎn)品和運(yùn)營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網(wǎng)聯(lián)合創(chuàng)
  • 8月見!小米MIX Fold 3獲得3C認(rèn)證:支持67W快充

    這段時(shí)間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • iQOO Neo8 Pro搶先上架:首發(fā)天璣9200+ 安卓性能之王

    經(jīng)過了一段時(shí)間的密集爆料,昨日iQOO官方如期對外宣布:將于5月23日推出全新的iQOO Neo8系列新品,官方稱這是一款擁有旗艦級性能調(diào)校的作品。隨著發(fā)布時(shí)
  • 引領(lǐng)旗艦級影像能力向中端機(jī)普及 OPPO K11 系列發(fā)布 1799 元起

    7月25日,OPPO正式發(fā)布K系列新品—— OPPO K11 。此次 K11 在中端手機(jī)市場長期被忽視的影像板塊發(fā)力,突破性地搭載索尼 IMX890 旗艦大底主攝,支持 OIS
Top 主站蜘蛛池模板: 贡山| 湘潭市| 甘谷县| 应城市| 胶南市| 潮州市| 长寿区| 黔西县| 黄石市| 株洲市| 平乡县| 新源县| 广东省| 平湖市| 盘山县| 陕西省| 平顶山市| 依兰县| 泸西县| 习水县| 保德县| 平乐县| 安泽县| 虎林市| 铜川市| 永登县| 通榆县| 万盛区| 独山县| 泾川县| 贵南县| 莫力| 怀柔区| 繁峙县| 固原市| 施秉县| 新昌县| 横山县| 阿城市| 贡觉县| 桃江县|