」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何讓您的 React 應用程式更快:效能提示和最佳實踐

如何讓您的 React 應用程式更快:效能提示和最佳實踐

發佈於2024-11-08
瀏覽:139

啊,反应!我们喜爱的用于构建 UI 的库。它就像一剂神奇的药剂,让我们的网络应用程序感觉具有交互性和快速性——直到有一天,它却没有了。突然,你注意到事情变慢了。点击按钮就像用信鸽寄信一样。您的应用程序从闪电般的速度变成了慢吞吞的速度,用户开始给您“看”。

但是别担心!就像咖啡可以解决大部分生活问题一样(或者我们是这么认为的),一些关键技术可以增强你的 React 应用程序并使其恢复到最高速度。让我们探索 6 种简单的方法来优化你的 React 应用程序,让它比你每天喝咖啡更快。

1.代码分割:仅加载您需要的内容

曾经走进一个房间,打开所有的灯,然后意识到你只需要一盏灯吗?当你将所有内容捆绑成一大块时,这就是你的 React 应用程序所做的事情。相反,通过代码分割,您只需加载应用程序当前需要的部分。就像逐个房间打开灯一样!

使用 React.lazy() 和 Suspense 是实现此目的的完美方法:

import React, { Suspense } from 'react';

const LazyComponent = React.lazy(() => import('./LazyComponent'));

const App = () => {
  return (
    Loading...}>
      
    
  );
}

为什么有帮助:代码分割通过推迟加载未使用的代码直到必要时来减少应用程序的初始加载时间。用户无需等待整个应用程序加载即可看到屏幕上的内容。

2.延迟加载图像:不要一次加载所有零食

想象一下,订购一份披萨,却收到了一年的食品杂货。听起来很荒谬,对吧?好吧,这就是当您预先加载所有图像时会发生的情况。相反,延迟加载图像,因此您只获取必要的图像,就像一次订购一个披萨一样。

使用像react-lazyload这样的库是一个快速解决方案:

import LazyLoad from 'react-lazyload';


  Lazy Loaded Image

为什么有帮助:通过延迟加载图像,您可以减少初始页面加载时间,并且仅在需要时下载图像,从而提高性能和用户体验。

3. useCallback 和 useMemo:React 的内存提升

就像你不断重复使用同一个咖啡杯以节省清洗时间一样,如果你允许,React 可以重复使用值和函数! useCallbackuseMemo 是帮助您存储昂贵的计算或函数的钩子,因此它们不会在每次渲染时重新计算。

useMemo 示例:

const expensiveCalculation = (num) => {
  return num ** 2;
};

const MyComponent = ({ num }) => {
  const squaredNumber = React.useMemo(() => expensiveCalculation(num), [num]);

  return 
{squaredNumber}
; }

useCallback 示例:

const handleClick = useCallback(() => {
  console.log("Clicked");
}, []);

为什么有帮助:使用 useMemo,React 不必重做昂贵的计算。 useCallback 会阻止您在每次渲染时创建新函数。这可以让 React 平稳运行——就像升级 RAM 一样!

4.使用 React.memo 进行记忆:停止不必要的重新渲染

你有一个朋友一遍又一遍地重复同一个故事吗? React 也可以像这样——即使不需要,也会重新渲染组件!这就是 React.memo 的用武之地,它阻止 React 重新渲染组件,除非它们的 props 发生变化。

const MyComponent = React.memo(({ value }) => {
  return 
{value}
; });

为什么有帮助:React.memo 就像告诉 React,“嘿,你以前听说过这个!除非有新的东西,否则不要重复。”它避免了不必要的重新渲染,节省了时间和资源。

5.有效管理状态:仅在需要时才提升状态

提升状态是 React 中的常见模式,但有时我们会因为将状态提升得太高或在错误的位置管理太多状态而感到内疚。这可能会导致过度的重新渲染。尽可能保持组件本地状态,并仅在真正必要时提升状态来避免不必要的重新渲染。

const ParentComponent = () => {
  const [sharedState, setSharedState] = useState(false);

  return (
    
      
      
    >
  );
}

const ChildComponent = ({ sharedState }) => {
  return 
{sharedState ? 'Active' : 'Inactive'}
; } const AnotherChild = ({ setSharedState }) => { return ; }

为什么有帮助:通过更仔细地管理状态并仅在需要时提升它,您可以避免兄弟组件不必要的重新渲染。这可以让您的应用程序专注且高效。

6。消除用户输入的抖动:冷静,反应!

想象一下,有人疯狂地在搜索栏中输入内容,而您的应用程序试图处理每一次击键。糟糕的React可能是子弹出汗了!输入去抖动 - 仅在用户暂停后处理输入的过程,而不是在每次按键时处理输入。

使用lodash.debounce可以解决这个问题:

import _ from 'lodash';

const Search = () => {
  const [query, setQuery] = useState('');

  const debouncedSearch = _.debounce((input) => {
    // Do your search logic
    console.log(input);
  }, 500);

  const handleChange = (e) => {
    setQuery(e?.target?.value);
    debouncedSearch(e?.target?.value);
  };

  return ;
}

为什么有帮助:React 不会在每次击键时都陷入恐慌,反跳动可以让它喘口气。这可以确保在处理实时用户输入(例如搜索或表单字段)时获得更好的性能。

结论:优化 React 应用程序并不是什么火箭科学——它更像是确保你不会一口气喝六杯咖啡!从代码分割到延迟加载图像,这些技术将帮助您保持 React 应用程序的快速响应。因此,下次当你的应用程序开始感觉迟缓时,请记住:这不是 React 的错——它只是需要一点优化!

请记住,优化 React 应用程序是一种平衡。您不需要立即投入所有这些技术。相反,确定您的应用程序的瓶颈,应用适当的优化,然后观察您的应用程序变得比您喝完咖啡的速度还要快!



感谢您的阅读,如果您喜欢这篇文章,请分享并留下建议。


How to Make Your React App Faster: erformance Tips and Best Practices

与我联系

网站:Hardik Gohil

Github:https://github.com/HardikGohilHLR

Linkedin:https://www.linkedin.com/in/hardikgohilhlr

谢谢❤️

版本聲明 本文轉載於:https://dev.to/hardikgohilhlr/how-to-make-your-react-app-faster-6-performance-tips-and-best-practices-4hd3?1如有侵犯,請聯絡study_golang @163.com刪除
最新教學 更多>
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-27
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-12-27
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-27
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-27
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-27
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-27
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-27
  • 如何準確地透視具有不同記錄的資料以避免遺失資訊?
    如何準確地透視具有不同記錄的資料以避免遺失資訊?
    有效地透視不同記錄透視查詢在將資料轉換為表格格式、實現輕鬆資料分析方面發揮著至關重要的作用。但是,在處理不同記錄時,資料透視查詢的預設行為可能會出現問題。 問題:忽略不同值考慮下表:------------------------------------------------------ | Id...
    程式設計 發佈於2024-12-27
  • 為什麼 C 和 C++ 忽略函式簽章中的陣列長度?
    為什麼 C 和 C++ 忽略函式簽章中的陣列長度?
    將陣列傳遞給C 和C 中的函數問題:為什麼C和C 編譯器允許在函數簽章中宣告數組長度,例如int dis(char a[1])(當它們不允許時)強制執行? 答案:C 和C 中用於將數組傳遞給函數的語法是歷史上的奇怪現象,它允許將指針傳遞給第一個元素詳細說明:在C 和C 中,數組不是透過函數的引用傳遞...
    程式設計 發佈於2024-12-26
  • 如何刪除 MySQL 中的重音符號以改進自動完成搜尋?
    如何刪除 MySQL 中的重音符號以改進自動完成搜尋?
    在MySQL 中刪除重音符號以實現高效的自動完成搜尋管理大型地名資料庫時,確保準確和高效至關重要資料檢索。使用自動完成功能時,地名中的重音可能會帶來挑戰。為了解決這個問題,一個自然的問題出現了:如何在 MySQL 中刪除重音符號以改善自動完成功能? 解決方案在於為資料庫列使用適當的排序規則設定。透過...
    程式設計 發佈於2024-12-26
  • 如何在MySQL中實作複合外鍵?
    如何在MySQL中實作複合外鍵?
    在 SQL 中實作複合外鍵一個常見的資料庫設計涉及使用複合鍵在表之間建立關係。複合鍵是多個列的組合,唯一標識表中的記錄。在這個場景中,你有兩個表,tutorial和group,你需要將tutorial中的複合唯一鍵連結到group中的欄位。 根據MySQL文檔,MySQL支援外鍵對應到複合鍵。但是,...
    程式設計 發佈於2024-12-26
  • 為什麼我的 JComponent 隱藏在 Java 的背景圖片後面?
    為什麼我的 JComponent 隱藏在 Java 的背景圖片後面?
    調試背景圖像隱藏的JComponent在Java 應用程式中使用JComponent(例如JLabels)時,必須確保正確的行為和可見度。如果遇到組件隱藏在背景圖像後面的問題,請考慮以下方法:1。正確設定組件透明度:確保背景面板是透明的,以允許底層組件透過。使用setOpaque(false)方法來...
    程式設計 發佈於2024-12-26
  • 如何在 PHP 中轉換所有類型的智慧引號?
    如何在 PHP 中轉換所有類型的智慧引號?
    在 PHP 中轉換所有類型的智慧引號智慧引號是用來取代常規直引號(' 和")的印刷標記。它們提供了更精緻和然而,軟體應用程式通常會在不同類型的智能引號之間進行轉換,從而導致不一致。智能引號中的挑戰轉換轉換智慧引號的困難在於用於表示它們的各種編碼和字符,不同的作業系統和軟體程式採用自...
    程式設計 發佈於2024-12-26
  • 循環 JavaScript 陣列有哪些不同的方法?
    循環 JavaScript 陣列有哪些不同的方法?
    使用 JavaScript 迴圈遍歷陣列遍歷陣列的元素是 JavaScript 中常見的任務。有多種方法可供選擇,每種方法都有自己的優點和限制。讓我們探討一下這些選項:陣列1。 for-of 遵循(ES2015 )此循環使用迭代器迭代數組的值:const arr = ["a", ...
    程式設計 發佈於2024-12-26
  • 如何在 Python 中有效地暫停 Selenium WebDriver 執行?
    如何在 Python 中有效地暫停 Selenium WebDriver 執行?
    Selenium WebDriver 中的等待與條件語句問題: 如何在 Python 中暫停 Selenium WebDriver 執行幾毫秒? 答案:雖然time.sleep() 函數可用於暫停執行指定的秒數,在 Selenium WebDriver 自動化中一般不建議使用。 使用 Seleniu...
    程式設計 發佈於2024-12-26

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3