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

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

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

啊,反应!我们喜爱的用于构建 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刪除
最新教學 更多>
  • 如何在 C++ 容器中儲存異質物件:boost::any 或自訂實作?
    如何在 C++ 容器中儲存異質物件:boost::any 或自訂實作?
    在C 容器中儲存異質物件C 容器通常需要同質元素,這意味著它們只能保存單一類型的對象。但是,在某些情況下,您可能需要一個可以容納混合資料類型的容器。本文探討如何使用 boost::any 函式庫和自訂方法來實現此目的。 使用 boost::anyboost::any 是一個模板類別可以容納任何 C ...
    程式設計 發佈於2024-11-08
  • 使用 Pandas 掌握數據分析:從數據中釋放洞察力
    使用 Pandas 掌握數據分析:從數據中釋放洞察力
    資料分析是資料科學的核心,Python 的 Pandas 函式庫是一個強大的工具,可以讓這項任務變得更輕鬆、更有效率。無論您使用簡單的電子表格還是大型資料集,Pandas 都可以讓您像專業人士一樣靈活地操作、分析和視覺化資料。在本文中,我們將深入探討 Pandas 的基礎知識,涵蓋從資料操作到進階分...
    程式設計 發佈於2024-11-08
  • 使用 GitLab CI/CD 和 Terraform 實作 Lambda 以進行 SFTP 整合、Go 中的 S Databricks
    使用 GitLab CI/CD 和 Terraform 實作 Lambda 以進行 SFTP 整合、Go 中的 S Databricks
    通过 Databricks 中的流程自动化降低成本 我的客户需要降低在 Databricks 上运行的流程的成本。 Databricks 负责的功能之一是从各种 SFTP 收集文件,解压缩它们并将它们放入数据湖中。 自动化数据工作流程是现代数据工程的重要组成部分。在本文中,我们将探...
    程式設計 發佈於2024-11-08
  • 最佳免費開源圖示庫 4
    最佳免費開源圖示庫 4
    In 2024, finding the best free icon library can significantly enhance the visual appeal of your websites, apps, or digital projects. Whether you're a ...
    程式設計 發佈於2024-11-08
  • React Part 元件、State 和 Props 入門
    React Part 元件、State 和 Props 入門
    歡迎回到我們的 React.js 之旅!在上一篇文章中,我們介紹了 React 的基礎知識,強調了它作為建立動態使用者介面的函式庫的優勢。今天,我們將深入探討創建 React 應用程式所需的三個基本概念:元件、狀態和屬性。讓我們詳細探討這些概念! 什麼是 React 元件? Rea...
    程式設計 發佈於2024-11-08
  • 如何利用原生 ES6 Promises 有效地連結異步 jQuery 函數?
    如何利用原生 ES6 Promises 有效地連結異步 jQuery 函數?
    JavaScript 的互通性承諾實現非同步jQuery 函數的高效連結連結異步jQuery 函數時,通常需要避免jQuery 的內建函數Promises 功能並使用原生ES6 Promises 取代。這種互通性允許 jQuery 操作和您想要的 Promise 實現之間的無縫整合。 使用Nativ...
    程式設計 發佈於2024-11-08
  • 在 Python 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在 Python 中使用 ElementTree 的「find」和「findall」方法時如何忽略 XML 命名空間?
    在ElementTree 的“find”和“findall”方法中忽略XML 命名空間使用ElementTree 模組解析和定位XML 文件中的元素時,命名空間會帶來複雜性。以下介紹如何在 Python 中使用「find」和「findall」方法時忽略命名空間。 當 XML 文件包含命名空間時,會導...
    程式設計 發佈於2024-11-08
  • Bitbucket 綜合指南:功能、整合和最佳實踐
    Bitbucket 綜合指南:功能、整合和最佳實踐
    Bitbucket简介 Bitbucket 是 Atlassian 旗下基于 Git 的源代码存储库托管服务,以其强大的集成能力和强大的协作功能而闻名。它适合各种规模的团队,提供可简化开发工作流程、提高生产力并确保安全代码管理的解决方案。无论您是小型团队还是大型企业的一部分,Bitbucket 都...
    程式設計 發佈於2024-11-08
  • 用於 PDF 處理的 PHP 庫:評估和用例指南
    用於 PDF 處理的 PHP 庫:評估和用例指南
    PDF generation and processing is a common requirement in many web applications, especially for generating invoices, reports, or documents dynamically....
    程式設計 發佈於2024-11-08
  • 如何在 Python 中用逗號連接清單中的字串?
    如何在 Python 中用逗號連接清單中的字串?
    從列表中用逗號連接字符串將字符串列表映射到逗號分隔的字符串是編程中的常見任務。可以採用各種方法來實現此目標,每種方法都有自己的優點和缺點。 一種流行的方法是將 join 方法與映射函數結合使用。此方法需要建立一個中間字串,用作各個字串之間的分隔符號。例如:my_list = ['a', 'b', '...
    程式設計 發佈於2024-11-08
  • 如何處理 AngularJS 應用程式中的錨點哈希連結?
    如何處理 AngularJS 應用程式中的錨點哈希連結?
    AngularJS 中的錨點哈希處理使用錨點瀏覽網頁是一種常見的做法,特別是對於具有多個部分的長頁面。然而,在 AngularJS 應用程式中,錨連結處理可能會出現問題。 當點擊 AngularJS 中的錨定連結時,預設行為是攔截點擊並將使用者重新導向到不同的頁面。為了解決這個問題,AngularJ...
    程式設計 發佈於2024-11-08
  • 用 Java 編寫多執行緒應用程式:綜合指南
    用 Java 編寫多執行緒應用程式:綜合指南
    在軟體開發領域,效率和速度至關重要。隨著應用程式複雜性的增加以及需要處理的資料量的增加,利用現代多核心處理器的功能變得至關重要。這就是 Java 的並發特性發揮作用的地方,它允許開發人員編寫可以同時執行多個任務的多執行緒應用程序,從而顯著提高效能。 了解 Java 並發 Java...
    程式設計 發佈於2024-11-08
  • JavaScript 中的 Promise,4 人指南
    JavaScript 中的 Promise,4 人指南
    隨著 JavaScript 的不斷發展,理解非同步程式設計對於現代開發至關重要。 Promise 是一個強大的工具,可讓您更有效地處理非同步操作。這是有關如何在 JavaScript 專案中使用 Promise 的指南。 什麼是 Promise? Promise 是一個對象,表示非同步操作的最終...
    程式設計 發佈於2024-11-08
  • 關於 React useState Hook 你需要了解的一切 - 裡面的實際例子
    關於 React useState Hook 你需要了解的一切 - 裡面的實際例子
    ReactJS useState Hook:初学者指南 介绍 ReactJS 是一个用于构建用户界面的流行 JavaScript 库,引入了 hooks 来简化和增强组件逻辑。 React 中最常用的钩子之一是 useState 钩子,它管理组件的状态。了解其工作原...
    程式設計 發佈於2024-11-08
  • **何時在 JavaScript 中使用 Mouseover 與 Mouseenter?
    **何時在 JavaScript 中使用 Mouseover 與 Mouseenter?
    了解 Mouseover 和 Mouseenter 事件之間的差異mouseover 和 mouseenter 事件都回應滑鼠遊標在元素上的移動。然而,它們之間有一個微妙的區別。 Mouseover每次滑鼠遊標進入或在元素(包括後代)的邊界內移動時,都會觸發 mouseover 事件元素。這意味著,...
    程式設計 發佈於2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3