使用 Performance API 實現前端資源監控

来源:https://www.cnblogs.com/chenyishi/p/18411037
-Advertisement-
Play Games

1. Performance API 的用處 Performance API 是瀏覽器中內置的一組工具,用於測量和記錄頁面載入和執行過程中的各類性能指標。它的主要用處包括: 監控頁面資源載入:跟蹤頁面中的資源(如 CSS、JavaScript、圖片)的載入時間。 分析頁面載入時間:從導航到頁面完全渲 ...


1. Performance API 的用處

Performance API 是瀏覽器中內置的一組工具,用於測量和記錄頁面載入和執行過程中的各類性能指標。它的主要用處包括:

  • 監控頁面資源載入:跟蹤頁面中的資源(如 CSS、JavaScript、圖片)的載入時間。
  • 分析頁面載入時間:從導航到頁面完全渲染的所有時間點。
  • 衡量用戶交互性能:測量用戶點擊、輸入等操作的響應時間。
  • 優化性能瓶頸:通過標記特定的代碼片段和事件,精准定位性能瓶頸。

這些數據幫助開發者更好地理解頁面表現,進而對性能進行優化和改進。

2. Performance API 常用的 API

在使用 Performance API 時,以下幾個 API 是開發者最常用的工具:getEntries()mark()、以及 PerformanceObserver。這些 API 提供了從獲取性能數據到觀察性能事件的全面能力。

2.1 performance.getEntries()

performance.getEntries() 是 Performance API 提供的一個方法,它返回所有的性能條目(entries)。這些條目記錄了從頁面載入到當前時刻,各類資源的載入和交互的性能數據。性能條目包括頁面載入資源(如 CSS、JS、圖片等)以及自定義的事件標記。

// 獲取頁面中所有資源的性能條目
const entries = performance.getEntries();
console.log(entries);

通過 getEntries(),你可以獲取資源載入時間、開始時間、結束時間等詳細信息。這對於瞭解頁面中每個資源的載入耗時十分有幫助。

2.2 entries 的類型

getEntries() 返回的每個性能條目對象都屬於以下幾種類型,開發者可以根據需要篩選和分析不同類型的數據:

  • navigation:與頁面導航相關的條目,通常用於分析頁面載入的時間點。
  • resource:所有通過網路請求載入的資源條目,包括 JS、CSS、圖片等。
  • mark:開發者自定義的標記,用於記錄特定事件的開始或結束。
  • measure:通過 performance.measure() 生成的條目,用於測量兩個標記之間的時間間隔。

例如,使用 performance.getEntriesByType('resource') 可以只獲取資源載入的性能數據:

// 獲取所有資源載入的性能條目
const resourceEntries = performance.getEntriesByType('resource');
console.log(resourceEntries);

通過這種方式,開發者可以輕鬆獲取頁面資源的載入時間及其詳情。

2.3 performance.mark()

performance.mark() 是 Performance API 提供的一個方法,允許開發者在代碼中手動創建標記。這些標記可以用於記錄特定事件的發生時間,從而在分析性能時,更加精確地掌握代碼中某個關鍵操作的時機。

// 創建自定義標記
performance.mark('start-task');

// 執行某個任務
doSomething();

// 創建結束標記
performance.mark('end-task');

// 測量開始和結束之間的時間
performance.measure('Task Duration', 'start-task', 'end-task');

mark() 非常適合用於衡量應用程式中某段代碼的執行時間,與 measure() 一起使用可以提供更加詳細的性能分析。

2.4 PerformanceObserver

PerformanceObserver 是 Performance API 的一個高級特性,它可以監聽性能事件的發生,併在事件觸發時執行回調。這種觀察模式可以幫助開發者實時監控頁面中的資源載入、導航和其他性能相關的事件。

// 創建 PerformanceObserver 實例,監聽資源載入的事件
const observer = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  entries.forEach(entry => {
    console.log(`${entry.name}: ${entry.duration}ms`);
  });
});

// 監聽資源類型的性能條目
observer.observe({ entryTypes: ['resource'] });

通過 PerformanceObserver,你可以監聽特定類型的性能條目,如 resourcemark,並實時分析其數據。對於監控資源載入、關鍵操作或用戶交互時的性能表現非常有用。

總結

Performance API 是前端開發者進行性能監控的強大工具,它提供了對頁面載入、資源載入以及用戶交互的詳細分析能力。常用的 API,如 getEntries()mark()、以及 PerformanceObserver,可以幫助開發者實時獲取和分析性能數據。

通過合理地使用 Performance API,你可以更好地瞭解頁面中各類操作的性能表現,從而有效地優化 Web 應用的載入速度和用戶體驗。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 認識並學習下還沒來得及學習的一些 HTML5 標簽 <ruby> 標簽 HTML <ruby> 元素被用來展示東亞文字註音或字元註釋。 比如: <ruby>兄弟<rt>xiongdi</rt></ruby> <rt> 元素包含字元的發音,字元在 ruby 註解中出現,它用於描述東亞字元的發音。這個元 ...
  • title: Nuxt Kit 組件管理:註冊與自動導入 date: 2024/9/15 updated: 2024/9/15 author: cmdragon excerpt: Nuxt Kit 為組件的註冊和導入提供了靈活高效的解決方案。無論你是要批量導入組件,還是單獨處理特定組件,這些工具都能 ...
  • <el-dialog width="600px" :title="title" :visible.sync="dialogVisible" :close-on-click-modal="false" :before-close="handleBeforeClose" @open="handleOpe ...
  • title: Nuxt Kit 自動導入功能:高效管理你的模塊和組合式函數 date: 2024/9/14 updated: 2024/9/14 author: cmdragon excerpt: 通過使用 Nuxt Kit 的自動導入功能,您可以更高效地管理和使用公共函數、組合式函數和 Vue A ...
  • IntersectionObserver (自動監聽元素是否進入了設備的可視區域之內) 示例: const io = new IntersectionObserver(callback, option); // 獲取元素 const target = document.getElementById( ...
  • 同步載入 阻塞模式,提高安全性 過多JS載入會影響頁面效率 預設情況下,JS是同步載入,及優先載入外部JS,只有當JS文件載入完成,don和css才開始載入 <script src = 'index.js' ></script> 非同步載入 非阻塞載入 動態創建script defer 延遲載入JS, ...
  • 一、實現一個光影牆 1. 根據自定義坐標點,輸出一個光影牆 /** * 添加光影牆 */ function addLightWall() { const geometry = new THREE.BufferGeometry(); const vertices = new Float32Array( ...
  • title: 使用 Nuxt Kit 檢查模塊與 Nuxt 版本相容性 date: 2024/9/13 updated: 2024/9/13 author: cmdragon excerpt: 通過 Nuxt Kit 提供的相容性檢查工具,您可以輕鬆地確保您的模塊與不同版本的 Nuxt 相容。這將有 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...