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 文件,壓縮資源,減少請求的體積和數量。
-
緩存策略:合理配置緩存頭,提高資源的緩存利用率,減少網絡請求。