建立現代 Web 應用程式時,效能是關鍵。使用者期望應用程式快速、反應靈敏,即使是輕微的延遲也會導致沮喪。 React 雖然功能強大,但有時會遇到效能瓶頸,尤其是當應用程式規模和複雜性不斷增長時。幸運的是,有多種技術可以優化效能,包括記憶、延遲載入等等。
在本指南中,我們將詳細介紹一些最佳化 React 應用程式效能的最有效方法。我們將介紹記憶、延遲載入和 React Profiler 等工具的基礎知識,以幫助您識別和修復瓶頸。讓我們開始吧!
簡介:為什麼效能在現代 React 應用程式中很重要
將您的網路應用程式想像成一輛汽車——無論它的外觀多麼時尚,如果它性能不佳,用戶體驗就會受到影響。在 React 應用程式中,這種「效能」是指元件渲染的速度以及資料或狀態變更時更新的效率。
隨著你的 React 應用程式的擴展,不必要地重新渲染元件或一次加載大量套件可能會導致效能下降。這就是為什麼學習 React 效能最佳化 技術對於建立流暢、高效能的應用程式至關重要。
React 中的記憶化
如何有效使用 React.memo 和 useMemo
記憶化是一個奇特的詞,它的意思是快取函數呼叫的結果,這樣你就不必每次都重新計算。在 React 中,記憶化透過記住先前渲染的結果並在沒有任何更改的情況下使用快取的結果來幫助防止不必要的重新渲染。
React.memo
讓我們從 React.memo 開始。如果元件的 props 沒有改變,這個高階元件會阻止元件重新渲染。
例子:
const MyComponent = React.memo(function MyComponent({ name }) { console.log('Rendered'); return <div>Hello, {name}</div>; });
在此範例中,MyComponent 僅在 name 屬性變更時重新渲染。如果傳遞相同的名稱值,React 將跳過渲染,從而提高效能。
使用備忘錄
接下來是useMemo。該鉤子用於記住功能組件內昂貴的計算或值。
例子:
import { useMemo } from 'react'; function MyApp({ items }) { const expensiveCalculation = useMemo(() => { return items.reduce((total, item) => total + item.value, 0); }, [items]); return <div>Total Value: {expensiveCalculation}</div>; }
這裡,計算僅在 items 數組更改時再次運行,避免在每次渲染時重新計算相同的結果,從而節省時間。
延遲載入組件
使用 React.lazy 縮短載入時間
延遲載入是一種技術,其中元件僅在需要時才載入,而不是預先載入所有內容。這有助於減少應用程式的初始載入時間,使其感覺更快。
React 提供了一個名為 React.lazy() 的內建函數,讓您可以按需載入元件。
例子:
const MyComponent = React.memo(function MyComponent({ name }) { console.log('Rendered'); return <div>Hello, {name}</div>; });
在此範例中,MyComponent 僅在實際需要時才會載入。 Suspense 元件在取得元件時提供後備 UI(如載入旋轉器),讓使用者體驗更加流暢。
用於效能監控的 React Profiler
如何識別瓶頸
無法衡量的東西很難優化。這就是 React Profiler 的用武之地。 React Profiler 可讓您追蹤元件的效能,識別緩慢的渲染,並測量重新渲染的「成本」。
要使用 React Profiler,只要用
例子:
import { useMemo } from 'react'; function MyApp({ items }) { const expensiveCalculation = useMemo(() => { return items.reduce((total, item) => total + item.value, 0); }, [items]); return <div>Total Value: {expensiveCalculation}</div>; }
使用 Profiler,您可以追蹤每個元件渲染所需的時間,並找到可以改進效能的區域,例如不必要的重新渲染。
其他優化策略
程式碼分割、事件處理最佳化等
除了記憶和延遲載入之外,還有其他幾種技術可以提高 React 應用程式的效能:
- 程式碼拆分:將您的應用程式分成更小的區塊,可以使用 Webpack 的程式碼分割功能按需載入。這會減少初始包的大小。
import React, { Suspense, lazy } from 'react'; const MyComponent = lazy(() => import('./MyComponent')); function App() { return ( <suspense fallback="{<div">Loading...}> <mycomponent></mycomponent> </suspense> ); }
- 事件處理最佳化:使用 useCallback 鉤子來記憶事件處理程序,防止它們在每次渲染時重新建立。
import { Profiler } from 'react'; function onRenderCallback( id, // the "id" prop of the Profiler tree that has just committed phase, // either "mount" (if the tree just mounted) or "update" (if it re-rendered) actualDuration, // time spent rendering the committed update baseDuration, // estimated time to render the entire subtree without memoization startTime, // when React began rendering this update commitTime, // when React committed this update interactions // the Set of interactions belonging to this update ) { console.log({ id, phase, actualDuration }); } function MyApp() { return ( <profiler id="App" onrender="{onRenderCallback}"> <mycomponent></mycomponent> </profiler> ); }
- 去抖動與限制:透過去抖動或限制來最佳化事件偵聽器,例如捲動或調整大小,以限制更新頻率。
const OtherComponent = lazy(() => import('./OtherComponent'));
結論:使用這些技術建立高效能 React 應用程式
建立快速且有效率的 React 應用程式需要多種技術的組合。將 memoization 與 React.memo 和 useMemo 結合使用,您可以防止不必要的重新渲染。 延遲載入 使用 React.lazy 的元件可讓您透過僅在需要時取得元件來縮短載入時間。 React Profiler 可協助您辨識效能瓶頸並進行最佳化。
結合程式碼分割和事件最佳化等策略,您可以確保您的 React 應用程式提供流暢且響應迅速的用戶體驗,即使它們的大小和複雜性不斷增長。
準備好將您的 React 應用程式的效能提升到一個新的水平嗎? 在您的專案中嘗試這些最佳化技術,並觀察您的應用程式的速度提高!
如果您喜歡這篇文章,請考慮支持我的工作:
- 請我喝杯咖啡
- 預約電話尋求指導或職業建議
- 在 Twitter 上追蹤我
- 在 LinkedIn 上聯絡
以上是React 效能最佳化技術:記憶化、延遲載入等的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

本文系列在2017年中期進行了最新信息和新示例。 在此JSON示例中,我們將研究如何使用JSON格式將簡單值存儲在文件中。 使用鍵值對符號,我們可以存儲任何類型的

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

核心要點 JavaScript 中的 this 通常指代“擁有”該方法的對象,但具體取決於函數的調用方式。 沒有當前對象時,this 指代全局對象。在 Web 瀏覽器中,它由 window 表示。 調用函數時,this 保持全局對象;但調用對象構造函數或其任何方法時,this 指代對象的實例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。這些方法使用給定的 this 值和參數調用函數。 JavaScript 是一門優秀的編程語言。幾年前,這句話可

jQuery是一個很棒的JavaScript框架。但是,與任何圖書館一樣,有時有必要在引擎蓋下發現發生了什麼。也許是因為您正在追踪一個錯誤,或者只是對jQuery如何實現特定UI感到好奇

該帖子編寫了有用的作弊表,參考指南,快速食譜以及用於Android,BlackBerry和iPhone應用程序開發的代碼片段。 沒有開發人員應該沒有他們! 觸摸手勢參考指南(PDF)是Desig的寶貴資源


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用