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

當前位置:首頁 > 科技  > 軟件

如何有效監測網頁靜態資源大小?

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

前言

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

Performance

Performance 接口可以獲取到當前頁面中與性能相關的信息。Ob528資訊網——每日最新資訊28at.com

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

getEntries

該方法獲取一組當前頁面已經加載的資源PerformanceEntry對象。接收一個可選的參數options進行過濾,options支持的屬性有name,entryType,initiatorType。Ob528資訊網——每日最新資訊28at.com

const entries = window.performance.getEntries();

getEntriesByName

該方法返回一個給定名稱和 name 和 type 屬性的PerformanceEntry對象數組,name的取值對應到資源數據中的name字段,type取值對應到資源數據中的entryType字段。Ob528資訊網——每日最新資訊28at.com

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

getEntriesByType

該方法返回當前存在于給定類型的性能時間線中的對象PerformanceEntry對象數組。type取值對應到資源數據中的entryType字段。Ob528資訊網——每日最新資訊28at.com

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

嘗試獲取靜態資源數據

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

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

這樣可以獲取到非常多關于資源加載的數據:Ob528資訊網——每日最新資訊28at.com

Ob528資訊網——每日最新資訊28at.com

為了方便查看,我們來稍微處理下數據Ob528資訊網——每日最新資訊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`, // 資源加載時間    size: `${(item.transferSize / 1024).toFixed(0)}kb`, // 資源大小  })})

Ob528資訊網——每日最新資訊28at.com

這樣對于每個資源的類型、名稱、加載時長以及大小,都非常清晰Ob528資訊網——每日最新資訊28at.com

但是有些資源的大小為什么會是0呢?以及還有很多頁面上的資源貌似沒有統計到,這是為啥呢?Ob528資訊網——每日最新資訊28at.com

這是因為頁面上的資源請求并不是一次性加載完的,比如一些資源的懶加載,這里就有可能會統計不到,或者資源大小統計會有問題,所以我們需要監聽資源的動態加載。Ob528資訊網——每日最新資訊28at.com

監聽資源加載

以上介紹的3個API都無法做到對資源動態加載的監聽,這里就需要用到PerformanceObserver來處理動態加載的資源了Ob528資訊網——每日最新資訊28at.com

PerformanceObserver

PerformanceObserver 主要用于監測性能度量事件,在瀏覽器的性能時間軸記錄新的 performanceEntry 時會被通知。Ob528資訊網——每日最新資訊28at.com

通過使用 PerformanceObserver() 構造函數我們可以創建并返回一個新的 PerformanceObserver 對象,從而進行性能的監測。Ob528資訊網——每日最新資訊28at.com

用法

PerformanceObserver 與其它幾個 Observer 類似,使用前需要先進行實例化,然后使用 observe 監聽相應的事件。Ob528資訊網——每日最新資訊28at.com

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

它主要有以下實例方法:Ob528資訊網——每日最新資訊28at.com

  • observe:指定監測的 entry types的集合。當 performance entry 被記錄并且是指定的 entryTypes 之一的時候,性能觀察者對象的回調函數會被調用。
  • disconnect:性能監測回調停止接收PerformanceEntry。
  • takeRecords:返回當前存儲在性能觀察器的 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`, // 資源加載時間      type: entry.initiatorType, // 資源類型      size: `${(entry.transferSize / 1024).toFixed(0)}kb`, // 資源大小    })    console.log('--', resourceList)  })}).observe({ entryTypes: ['resource'] })

這里需要注意的是,獲取類型除了img還得加上css,因為CSS中可能會有通過url()加載的背景圖。Ob528資訊網——每日最新資訊28at.com

Ob528資訊網——每日最新資訊28at.com

這樣,頁面上的圖片大小以及加載時長一目了然了Ob528資訊網——每日最新資訊28at.com

通知

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

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

通知如下:Ob528資訊網——每日最新資訊28at.com

Ob528資訊網——每日最新資訊28at.com

這里為了避免跨域,使用nest自己包了一層,這樣就能夠及時發現線上配置資源是否有問題,并且這個腳本也不需要所有用戶都執行,因為大家的資源都是一樣的,只需要配置特定白名單(比如開發、測試、產品),在頁面上線后,在進行線上回歸的同時執行該腳本去監測上線配置資源是否都合理...Ob528資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-85234-0.html如何有效監測網頁靜態資源大小?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

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

標簽:
  • 熱門焦點
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 分享六款相見恨晚的PPT模版網站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網站旨在為全球Office用戶提供豐富的高品質原創PPT模板、實用文檔、數據圖表及個性化定制服務。優點:OfficePLUS是微軟官方網站,囊括PPT模板、Word模
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
Top 主站蜘蛛池模板: 淮北市| 康马县| 宁波市| 临漳县| 玛沁县| 贺兰县| 平舆县| 沾化县| 深圳市| 彰武县| 尼勒克县| 台前县| 宝清县| 应城市| 昌都县| 依兰县| 庐江县| 巴青县| 会理县| 和政县| 湘西| 山阳县| 双柏县| 大名县| 保定市| 会宁县| 东乡| 体育| 宜君县| 阳新县| 辽源市| 元谋县| 伊通| 洛南县| 彭山县| 安新县| 寻乌县| 象州县| 绥宁县| 新疆| 康定县|