前端開發項目性能瓶頸分析

1.?使用 rollup-plugin-visualizer 分析構建

借助 rollup-plugin-visualizer 插件,可以分析通過 rollup 構建出的產物內容,并生成可視化圖表,幫助你分析打包后的文件大小以及各個模塊的占用情況。

1.1. 安裝插件

你需要在你的項目中安裝 rollup-plugin-visualizer:

npm install --save-dev rollup-plugin-visualizer

1.2.?配置插件

在 Rollup 的配置文件(如 rollup.config.js)中引入并配置 visualizer 插件。

// rollup.config.js
import { defineConfig } from 'rollup'
import visualizer from 'rollup-plugin-visualizer'export default defineConfig({input: 'src/main.js',output: {file: 'dist/bundle.js',format: 'es',},plugins: [// 其他插件...visualizer({filename: './dist/stats.html', // 輸出文件路徑open: true, // 構建完成后自動打開瀏覽器template: 'treemap' // 圖表類型 (sunburst, treemap, network)})]
})

1.3.?運行構建命令

運行 Rollup 構建命令來生成構建文件和可視化報告:

npx rollup -c

這將生成一個 stats.html 文件并自動在瀏覽器中打開(取決于配置)。

1.4.?分析輸出報告

打開生成的 stats.html 文件,你會看到一個可視化圖表,顯示了每個模塊的大小和在最終打包文件中的占用比例。這些信息可以幫助你識別出哪些模塊占用了過多的空間,進而優化你的項目(如移除未使用的庫、按需加載等)。

2.?使用 React DevTools 進行分析

使用 React DevTools 進行分析是調試和優化 React 應用程序的重要工具。React DevTools 是一個瀏覽器擴展,允許開發者在運行時檢查 React 組件的結構、查看組件的狀態和屬性、分析性能等。以下是詳細的使用步驟:

2.1.?安裝 React DevTools

React DevTools 可以在 Chrome、Firefox 和其他支持擴展的瀏覽器中使用。安裝步驟如下:

  • Chrome 瀏覽器:訪問 Chrome 網上應用店 搜索 "React Developer Tools" 并安裝。

  • Firefox 瀏覽器:訪問 Firefox 附加組件頁面 搜索 "React Developer Tools" 并安裝。

  • 安裝完成后,瀏覽器右上角會出現 React 的圖標,表示安裝成功。

2.2.?打開 React DevTools

1.?打開瀏覽器的開發者工具(快捷鍵F12 或 Ctrl+Shift+I)。

2. 在開發者工具,找到 "Components" 和 "Profiler" 這兩個新選項卡。這些是 React DevTools 的主要功能。

2.3.?使用 Components 面板

Components 面板 允許你查看 React 組件的層次結構、查看每個組件的 props 和 state,并檢查組件的 hooks。

  • 組件樹:在左側,您會看到應用程序的組件樹結構,類似于 DOM 樹。在組件樹中,點擊任意組件即可查看其詳細信息。

  • Props 和 State:在右側,可以查看當前選中組件的 props 和 state。可以直接在這里查看和修改組件的 props 或 state,方便調試。

  • Hooks:如果組件使用了 hooks,hooks 的狀態也會在這里顯示。點擊 hooks 可以查看其內部狀態。

2.4.?編輯 Props 和 State

React DevTools 提供了一些修改 props 和 state 的功能:

  • 雙擊想要修改的值(例如數字、字符串)即可編輯 props state。對于對象類型,點擊展開后也可以直接編輯內部值。

  • 這些修改不會永久更改代碼,而是只影響瀏覽器中當前運行的實例,適用于快速驗證假設和調試。

2.5.?使用 Profiler 面板

Profiler 面板 用于性能分析,幫助找出哪些組件消耗了較多的渲染時間。

  • 開始和停止記錄:點擊 “Start profiling” 按鈕來開始記錄應用的性能數據。進行一些交互操作后,點擊 “Stop profiling” 停止記錄。

  • 分析渲染時間:停止記錄后,您可以看到渲染的火焰圖(Flamegraph)和排名圖(Ranked),顯示每個組件的渲染時間。

  • 查找性能瓶頸:可以查看每個組件的 “Render duration” 和 “Commit duration” 時間,找出渲染慢的組件。

  • 原因分析:Profiler 還會顯示渲染的原因,如 props 改變、state 更新、強制更新等,這有助于理解組件更新的觸發點。

2.6.?其他功能

  • Highlight Updates:可以啟用組件更新高亮功能,幫助可視化了解哪些組件在重新渲染。

  • Debug Hooks:對于使用 hooks 的組件,可以通過 DevTools 查看 hooks 的狀態和變化過程。

3.?使用 Vue Devtools 進行分析

3.1.?安裝 Vue Devtools

你可以在 Chrome 網上應用商店或者 Firefox 附加組件頁面上找到 Vue Devtools 插件進行安裝。

  • Chrome 網上應用商店 - Vue Devtools

  • Firefox 附加組件 - Vue Devtools

3.2.?打開 Vue Devtools

打開開發者工具(F12 或右鍵菜單 > 檢查),選擇 Vue 選項卡。Vue Devtools 會顯示應用中的組件樹、Vuex 狀態(如果使用了 Vuex)、事件等信息。

3.3.?進行組件分析

  • 組件樹:可以查看組件的層級關系,選擇一個組件會顯示該組件的 Props、State、Computed 等信息。

  • 事件:可以查看事件的觸發情況。

  • 性能分析:通過切換到 Performance 標簽,你可以記錄并分析應用的渲染時間。你可以點擊 Start recording performance 按鈕,然后與應用交互,完成后點擊 Stop recording,Vue Devtools 會顯示一個性能圖表,顯示每個組件的渲染時間。你可以識別出渲染時間較長的組件,從而優化性能。

3.4.?Rerender 分析

在 Vue Devtools 的 Performance 選項卡中,可以看到應用的重新渲染(Rerender)次數。選擇某個組件可以查看它的渲染詳情,幫助你分析并減少不必要的重新渲染。

4.?使用 Performance 面板進行性能分析

使用 Chrome DevTools 的 Performance 面板進行性能分析是優化應用性能的關鍵步驟。以下是詳細步驟和關鍵點,以幫助你更好地理解和使用 Performance 面板來分析應用的性能:

4.1. 打開 Performance 面板

1. 在 Chrome 瀏覽器中打開你的應用。

2. 按下 F12 或 Ctrl + Shift + I(Windows)/ Cmd + Option + I(Mac),打開 DevTools。

3. 點擊“Performance”面板。

4.2. 錄制性能數據

1. 點擊 Performance 面板中的 “Record” 按鈕(紅色圓點)。

2. 在應用中執行你想分析的操作,如頁面加載、組件渲染、用戶交互等。

3. 完成操作后,點擊 “Stop” 按鈕停止錄制。

4.3.?分析錄制結果

錄制完成后,Performance 面板會顯示一段時間內的性能數據。關鍵部分包括:

  • Timings(時間線):展示了頁面執行各類任務的時間,如腳本執行、樣式計算、布局、繪制等。

  • Frames(幀):展示了頁面渲染幀的速率。綠色表示幀率良好,黃色或紅色表示幀率不佳。

  • Main(主線程):顯示 JavaScript 代碼在主線程的執行情況,幫助識別占用時間較長的任務。

  • GPU:展示 GPU 處理圖形任務的時間,幫助識別 GPU 相關的性能瓶頸。

在使用 Chrome DevTools 的 Performance 工具分析應用時,了解每個指標的含義以及如何解讀這些指標是優化性能的關鍵。以下是詳細的查看指標、分析方法及相應的優化建議。

4.4.?Performance 工具中的詳細指標

1. Overview(概覽圖)

  • FPS(Frames Per Second):顯示每秒渲染的幀數,理想情況下應接近 60 FPS。低于 30 FPS 表示頁面出現卡頓。

  • CPU 使用率:展示 CPU 在每個時間段的使用情況,反映頁面在主線程上的繁忙程度。

  • Net(網絡請求):顯示頁面加載過程中網絡請求的時序圖,幫助識別長時間加載的資源。

2. Main(主線程)

  • 顯示 JavaScript 的執行、樣式計算、布局、繪制等任務在主線程上的時間分布。

  • 關注任務的長度和頻率。主線程任務過長會導致頁面的交互性降低。

3. Scripting(腳本執行)

  • 包括組件的渲染、狀態更新和事件處理。腳本執行時間過長會顯著影響應用的響應速度。

4. Rendering(渲染)

  • 包含瀏覽器對 DOM 元素的布局計算和樣式應用。渲染時間過長通常是由復雜的 CSS 或頻繁的布局變動引起的。

5. Painting(繪制)

  • 包括將元素的像素繪制到屏幕上的過程。繪制時間長表明頁面可能包含復雜的圖形或頻繁的繪制操作。

6. Composite Layers(合成圖層)

  • 瀏覽器將頁面分為多個圖層并合成,幫助優化渲染性能。合成圖層過多或圖層頻繁更新會影響性能。

5.?使用 Lighthouse 進行性能和 SEO 分析

Lighthouse 是一個開源的自動化工具,用于提高網頁質量,能夠分析性能、可訪問性、SEO、最佳實踐等。

5.1.?打開 Lighthouse 面板

在 Chrome 中按 F12 打開開發者工具,選擇 Lighthouse 選項卡。

5.2.?配置分析選項

選擇要分析的內容(Performance、Accessibility、Best Practices、SEO、PWA)。根據需求勾選不同的選項。

5.3.?生成報告

點擊 Generate report 按鈕,Lighthouse 會在新標簽頁中加載并分析當前頁面,生成一份詳細的報告。

5.4.?分析報告

  • Performance: 提供了詳細的性能指標(如加載時間、交互時間等)和優化建議。

  • Accessibility: 提供了可訪問性問題的檢測結果,并給出了相應的改進建議。

  • Best Practices: 檢查網頁的安全性、資源加載情況等。

  • SEO: 提供了針對搜索引擎優化的建議。

5.5.?根據建議進行優化

根據 Lighthouse 的優化建議,可以逐步改進頁面性能和其他質量指標。

6.?使用 Memory 面板進行內存分析

Memory 面板用于分析網頁的內存使用情況,幫助你找出內存泄漏和優化內存使用。

6.1.?打開 Memory 面板

在 Chrome 中按 F12 打開開發者工具,選擇 Memory 選項卡。

6.2.?選擇快照類型

  • Heap Snapshot: 拍攝堆快照,顯示內存中對象的分布情況。適用于檢測內存泄漏。

  • Allocation Instrumentation on Timeline: 顯示內存分配情況,適用于查看內存分配頻率。

  • Allocation Sampling: 采樣內存分配數據,適用于了解哪些對象占用了內存。

6.3.?開始分析

選擇合適的選項后,點擊 Take snapshot 或 Start 按鈕,開始收集內存數據。

6.4.?分析內存使用情況

  • 查看對象分布:通過查看堆快照,可以找到內存占用較大的對象或不再需要的對象。

  • 檢測內存泄漏:比較多次快照,查找不必要的對象是否仍然存在(如 Event Listeners 未正確移除、未清理的定時器等)。

  • 優化內存使用:根據內存分析結果,優化對象的生命周期管理,釋放不再需要的內存,避免內存泄漏。

7.?優化方法及策略

7.1. 優化 JavaScript 執行

  • 減少不必要的渲染:使用 React.memo、useMemo、useCallback 避免無意義的渲染。

  • 分解復雜任務:將復雜的函數拆分,避免長時間的腳本執行。可以使用 requestIdleCallback 延遲執行不緊急的任務。

  • 異步操作:使用 setTimeout 或 requestAnimationFrame 將非關鍵任務異步執行,保持主線程的空閑。

7.2. 優化渲染和布局

  • 減少布局抖動:使用 will-change CSS 屬性提前通知瀏覽器可能的變動,減少重排。

  • 簡化樣式計算:避免使用復雜的 CSS 選擇器和嵌套,減少瀏覽器的計算壓力。

  • 優化動畫:盡量使用 transform 和 opacity,這些屬性的變動可以通過 GPU 加速,減少對主線程的影響。

7.3. 優化繪制和圖層合成

  • 減少繪制區域:避免全局重繪。可以將動畫或頻繁更新的元素置于單獨的圖層,減少合成壓力。

  • 使用硬件加速:通過 translateZ(0) 或 will-change 強制元素進入合成層,從而利用 GPU 加速。

  • 控制圖層數量:合成圖層過多會導致性能下降,盡量減少不必要的圖層創建。

7.4. 網絡優化

  • 資源加載優化:使用懶加載(lazy loading)、預加載(preloading)等手段優化資源加載時序。

  • 減少請求數量:合并 CSS 和 JavaScript 文件,壓縮資源,減少請求的體積和數量。

  • 緩存策略:合理配置緩存頭,提高資源的緩存利用率,減少網絡請求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90461.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90461.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90461.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ExoData.h - OpenExo

ExoData.h文件定位源代碼1. 頭文件依賴2. 核心類聲明3. 主要成員函數關節遍歷工具關節與配置相關數據/狀態操作控制參數/校準4. 主要成員變量總結文件定位 位置:src/ExoData.h 作用:定義 ExoData 類,作為 Exo 系統全局數據的核心容器。它將設…

緩存HDC內容用于后續Direct2D繪制.

思路&#xff1a;把HDC里的內容保存到Direct2D格式的位圖里&#xff0c;后續直接調用 renderTarget->DrawBitmap即可。本例中&#xff0c;位圖將保存為類的字段。本例中 COM 接口指針皆使用 com_ptr&#xff0c;這是 WinRT 的 COM 智能指針類&#xff0c;com_ptr<I>::…

“抓了個寂寞”:一次實時信息采集的意外和修復

1. 那天下午&#xff0c;輿情系統“遲到”了 那天下午&#xff0c;公司運營那邊突然在群里喊&#xff1a;“XX事件都快上熱搜榜前十了&#xff0c;咱們系統咋沒反應&#xff1f;” 我愣了幾秒&#xff0c;立馬翻后臺日志、爬蟲執行記錄&#xff0c;結果一查&#xff0c;還真有點…

數據結構之迪杰斯特拉算法

前言&#xff1a;前面兩篇文章介紹了生成圖的最小生成樹的算法&#xff0c;接下來兩篇文章會介紹圖的最短路徑的算法&#xff0c;迪杰斯特拉算法和弗洛伊德算法。迪杰斯特拉算法是用來計算一個點到其他所有點的最短路徑&#xff0c;這個點稱之為源點。 一、實現流程 回憶一下…

技術文檔 | OpenAI 的 Kafka 演進之路與 Pulsar 遷移潛力

導讀ChatGPT 用戶量指數級暴漲&#xff0c;OpenAI 的 Kafka 集群在一年內增長 20 倍至 30 個集群[1]&#xff0c;其 Kafka 架構面臨日均千億級消息&#xff08;峰值 QPS 800萬/秒&#xff09; 的壓力。這揭示了一個關鍵事實&#xff1a;OpenAI 的成功不只依賴模型&#xff0c;更…

【bug】 jetson上opencv無法錄制h264本地視頻

在Jetson Orin NX上無法使用opencv直接錄制h264/h265視頻流&#xff08;h264格式的視頻流才能在瀏覽器播放&#xff09; 解決&#xff1a; 軟件編碼&#xff1a;需要源碼編譯opencv 1.環境準備 pip uninstall opencv-python sudo apt install build-essential cmake git python…

解決http的web服務中與https服務交互的問題

問題背景&#xff1a; 需要在一個http的web服務中直接跟另一個https服務交互&#xff0c;不經過自身后端。 又來到了熟悉的跨域訪問問題。 解決邏輯就是使用nginx轉發&#xff0c;涉及到的文件也就是nginx.conf文件&#xff0c;前面解決minio鏈接時已經有經驗了&#xff0c;但…

網站訪問信息追蹤系統在安全與性能優化中的關鍵作用——網絡安全—仙盟創夢IDE

<?php // 收集訪問信息 $visitorInfo未來之窗 [timestamp > date(Y-m-d H:i:s),ip > $_SERVER[REMOTE_ADDR] ?? unknown,page > $_SERVER[REQUEST_URI] ?? unknown,method > $_SERVER[REQUEST_METHOD] ?? unknown,user_agent > $_SERVER[HTTP_USER_A…

Oracle 時間處理函數和操作符筆記

前言 寫sql時經常用到時間處理函數&#xff0c;我整理了一份Oracle的常用sql筆記,供大家參考。 如果對你有幫助&#xff0c;請點贊支持~ 多謝&#x1f64f; 筆記 -- 1. 獲取當前日期和時間 -- SYSDATE, SYSTIMESTAMP, CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP SELE…

TDengine時序數據庫 詳解

1. TDengine 簡介 TDengine 是一款 高性能、分布式、支持 SQL 的時序數據庫&#xff08;Time-Series Database, TSDB&#xff09;&#xff0c;專為 物聯網&#xff08;IoT&#xff09;、工業互聯網、金融監控、日志分析 等場景設計。其核心特點包括&#xff1a; 超高性能&…

【IDEA】idea怎么修改注冊的用戶名稱?

文章目錄[toc]問題**方法 1&#xff1a;通過 JetBrains 賬戶網站修改****方法 2&#xff1a;通過 IDEA 內跳轉修改&#xff08;快捷方式&#xff09;****注意事項****補充&#xff1a;修改 IDEA 內的項目級用戶名**如何退出IDEA用戶登錄&#xff1f;問題 在 IntelliJ IDEA 中修…

AR眼鏡重塑外科手術導航:精準“透視”新突破

在現代醫學領域&#xff0c;增強現實&#xff08;AR www.teamhelper.cn &#xff09;技術正以前所未有的方式改變外科手術導航的面貌。通過為醫生提供實時的三維可視化、精準的空間定位和智能交互功能&#xff0c;AR眼鏡正在成為手術室中的重要工具。本文將系統介紹AR眼鏡在手術…

服務端對接 HTTP 接口傳輸圖片 采用base64還是 multipart/form-data

在服務端對接HTTP接口傳輸圖片時&#xff0c;選擇 multipart/form-data 還是 Base64 編碼&#xff0c;需要根據具體場景權衡。以下是詳細對比和建議&#xff1a;1. multipart/form-data 優點 更適合大文件傳輸&#xff1a; 直接以二進制流傳輸圖片&#xff0c;無需編碼/解碼&am…

如何在 Windows 上安裝 MongoDB 及常見問題

MongoDB 是一款 NoSQL 數據庫&#xff0c;在數據管理和存儲方面以其無與倫比的強大功能和多功能性而脫穎而出。該平臺憑借其靈活性、可擴展性和高性能保持著領先優勢&#xff0c;贏得了眾多企業的信賴。在這方面&#xff0c;MongoDB 以及其在 Windows 操作系統中的表現&#xf…

JS與Go:編程語言雙星的碰撞與共生

在編程語言的璀璨星河中&#xff0c;JavaScript&#xff08;簡稱JS&#xff09;與Go語言憑借各自獨特的魅力&#xff0c;成為不同領域的佼佼者。前者以靈活多變的姿態征服了前端世界&#xff0c;后者則以高效穩健的特性在后端領域嶄露頭角&#xff0c;二者的碰撞與共生&#xf…

【開源】WpfMap:一個基于WPF(Windows Presentation Foundation)技術構建的數據可視化大屏展示頁面

文章目錄一、項目概述1.1 項目定位二、適用場景2.1 企業數據展示2.2 監控中心2.3 會議展示三、功能特性3.1 高度自定義3.2 實時更新3.3 豐富的可視化組件3.4 良好的用戶體驗四、技術資源4.1 開源地址一、項目概述 1.1 項目定位 WpfMap是一個基于WPF&#xff08;Windows Prese…

macbook安裝homebrew

homebrew是什么&#xff1f;Homebrew 是 macOS&#xff08;以及 Linux&#xff09;上的一款包管理工具&#xff0c;被稱為 “macOS 缺失的包管理器”&#xff0c;它能幫助用戶輕松安裝、卸載、更新各種命令行工具、開發環境、應用程序等。簡單來說&#xff0c;它的作用類似手機…

ViLT: 無卷積或區域監督的視覺-語言Transformer

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" ViLT: 無卷積或區域監督的視覺-語言Transformer 摘要 視覺與語言預訓練&#xff08;Vision-and-Language Pre-training, VLP&#xff09;在多種聯合視覺與語言的下游任務中顯著提升了性能。目前的 VLP 方法在很…

初識決策樹-理論部分

決策樹 前言 參考了大佬的博客&#xff1a;博客地址 適合分析離散數據&#xff0c;若是連續數據需要轉換成離散數據再做分析(比如圖中的年齡) 結構 決策樹由節點和有向邊組成&#xff1b;節點可分為內部節點和葉節點 內部節點:特征葉節點:類別有向邊:特征的取值范圍 在用決…

opencv--day02--圖像顏色處理及圖像仿射變換

文章目錄前言一、 圖像顏色處理1. 顏色加法1.1 OpenCV加法1.2 numpy加法1.3 顏色加權加法2.顏色空間2.1 RGB顏色空間2.2 HSV顏色空間3. 顏色轉換3.1 讀取的圖片同時轉換3.2 對已有圖片轉換4. 圖像灰度化4.1 灰度圖概念4.2 最大值灰度化4.3 平均值灰度化4.4 加權均值灰度化5. 圖…