"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > React Re-Rendering: 최적의 성능을 위한 모범 사례

React Re-Rendering: 최적의 성능을 위한 모범 사례

2024-11-05에 게시됨
검색:996

React Re-Rendering: Best Practices for Optimal Performance

React의 효율적인 렌더링 메커니즘은 React가 인기를 얻는 주요 이유 중 하나입니다. 그러나 애플리케이션이 복잡해짐에 따라 구성 요소 다시 렌더링을 관리하는 것이 성능을 최적화하는 데 중요해졌습니다. React의 렌더링 동작을 최적화하고 불필요한 재렌더링을 방지하기 위한 모범 사례를 살펴보겠습니다.

1. 기능적 구성요소에 React.memo() 사용

React.memo()는 기능적 컴포넌트의 렌더링을 메모하는 고차 컴포넌트입니다. 현재 Prop과 이전 Prop을 얕은 비교를 수행하여 불필요한 재렌더링을 방지합니다. props가 변경되지 않은 경우 React는 구성 요소 렌더링을 건너뛰고 마지막으로 렌더링된 결과를 재사용합니다.

import React from 'react';

const MemoizedComponent = React.memo(function MyComponent(props) {
  // Component logic
});

2. 클래스 컴포넌트를 위한 PureComponent 구현

클래스 구성 요소를 사용하는 경우 구성 요소 대신 PureComponent를 확장하는 것이 좋습니다. PureComponent는 컴포넌트가 업데이트되어야 하는지 여부를 결정하기 위해 props와 state를 얕은 비교를 수행합니다. 이는 props와 상태가 변경되지 않았을 때 불필요한 재렌더링을 방지하는 데 도움이 됩니다.

import React, { PureComponent } from 'react';

class MyComponent extends PureComponent {
  // Component logic
}

3. 인라인 함수 정의를 피하세요

렌더링 메서드 내에서 기능을 정의하면 불필요한 다시 렌더링이 발생할 수 있습니다. 대신, render 메서드 외부에서 함수를 정의하거나 간결한 이벤트 핸들러를 위해 화살표 함수를 사용하세요.

class MyComponent extends React.Component {
  handleClick = () => {
    // Handle click
  };

  render() {
    return ;
  }
}

4. useCallback Hook를 사용하여 기능을 메모합니다.

useCallback 후크는 기능을 메모하는 데 사용됩니다. 각 렌더링에서 불필요한 기능 재생성을 방지하여 이러한 기능에 의존하는 하위 구성 요소를 불필요하게 다시 렌더링할 수 있습니다.

import React, { useCallback } from 'react';

function MyComponent() {
  const handleClick = useCallback(() => {
    // Handle click
  }, []);

  return ;
}

5. 비용이 많이 드는 계산을 위해 useMemo Hook 활용

useMemo 후크는 비용이 많이 드는 계산을 메모하는 데 사용됩니다. 이는 렌더링할 때마다 값을 불필요하게 다시 계산하는 것을 방지하여 특히 복잡한 계산의 경우 성능을 향상시킬 수 있습니다.

import React, { useMemo } from 'react';

function MyComponent({ items }) {
  const filteredItems = useMemo(() => items.filter(item => item.visible), [items]);

  return (
    
    {filteredItems.map(item => (
  • {item.name}
  • ))}
); }

6. 목록에서 올바른 키 사용

구성요소 목록을 렌더링할 때 항상 고유한 키 속성을 제공하세요. React는 조정 중에 요소를 효율적으로 식별하기 위해 키를 사용합니다. 키가 잘못되거나 누락되면 성능 문제 및 예상치 못한 동작이 발생할 수 있습니다.

    {items.map(item => (
  • {item.name}
  • ))}

7. 동적 가져오기를 사용하여 코드 분할 구현

코드 분할을 사용하면 애플리케이션의 코드를 더 작은 덩어리로 분할할 수 있습니다. 동적 가져오기(import())를 사용하면 요청 시 애플리케이션의 일부를 로드하여 초기 번들 크기를 줄이고 로드 시간을 향상시킬 수 있습니다.

import React, { lazy, Suspense } from 'react';

const MyComponent = lazy(() => import('./MyComponent'));

function App() {
  return (
    Loading...}>
      
  );
}

8. 큰 목록을 위한 윈도우 구현

가상화라고도 알려진 창 작업에는 현재 화면에 표시되는 항목만 렌더링하는 작업이 포함됩니다. 이 기술은 초기 렌더링 시간을 줄이고 스크롤 성능을 향상시키므로 대규모 목록을 처리할 때 특히 유용합니다.

react-virtualized 및 React-window와 같은 라이브러리는 React 애플리케이션에 대한 효율적인 창 구현을 제공합니다.

9. 이미지에 대한 지연 로딩 구현

지연 로딩 이미지는 애플리케이션의 초기 로드 시간을 크게 향상시킬 수 있습니다. 필요할 때까지(즉, 뷰포트에 표시될 때) 이미지 로드를 연기함으로써 초기 번들 크기를 줄이고 인지된 성능을 향상시킬 수 있습니다.

반응 지연 로드 및 반응 지연 로드-이미지 구성 요소와 같은 라이브러리는 React 애플리케이션을 위한 사용하기 쉬운 지연 로딩 솔루션을 제공합니다.

10. 불변 데이터 구조 사용

불변 데이터 구조는 심층적인 동등성 검사의 필요성을 줄여 React의 렌더링 성능을 최적화하는 데 도움이 됩니다. 불변 데이터를 사용할 때 React는 심층 비교를 수행하는 대신 데이터 참조를 비교하여 구성 요소를 다시 렌더링해야 하는지 빠르게 결정할 수 있습니다.

Immutable.js 및 Immer와 같은 라이브러리는 React 애플리케이션에서 불변 데이터로 작업할 수 있는 불변 데이터 구조와 도우미 기능을 제공합니다.

결론

React의 렌더링 성능을 최적화하는 것은 부드럽고 반응이 빠른 사용자 경험을 제공하는 데 중요합니다. 이러한 모범 사례를 따르고 React의 내장 기능과 후크를 활용하면 사용자를 기쁘게 하는 고성능 React 애플리케이션을 만들 수 있습니다.

애플리케이션 성능을 지속적으로 프로파일링하고 측정하여 병목 현상과 개선이 필요한 영역을 식별해야 합니다. React DevTools 및 성능 모니터링 솔루션과 같은 React의 풍부한 도구 및 라이브러리 생태계가 이 프로세스에 도움이 될 수 있습니다.

React 개발에 대한 전문가 지원을 받으려면 ViitorCloud Technologies에 문의하여 숙련된 ReactJS 개발자를 고용하세요.

릴리스 선언문 이 기사는 https://dev.to/viitorcloud/react-re-rendering-best-practices-for-optimal-performance-30bo?1에 복제되어 있습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>
  • 버퍼: Node.js
    버퍼: Node.js
    Node.js의 버퍼에 대한 간단한 가이드 Node.js의 버퍼는 원시 바이너리 데이터를 처리하는 데 사용되며, 이는 스트림, 파일 또는 네트워크 데이터로 작업할 때 유용합니다. 버퍼를 만드는 방법 문자열에서: const buf = ...
    프로그램 작성 2024-11-05에 게시됨
  • Node.js의 버전 관리 마스터하기
    Node.js의 버전 관리 마스터하기
    개발자로서 우리는 다양한 Node.js 버전을 요구하는 프로젝트를 자주 접하게 됩니다. 이 시나리오는 Node.js 프로젝트에 정기적으로 참여하지 않는 신규 개발자와 숙련된 개발자 모두에게 함정입니다. 즉, 각 프로젝트에 올바른 Node.js 버전이 사용되는지 확인하는...
    프로그램 작성 2024-11-05에 게시됨
  • 문제 해결을 위해 Go 바이너리에 Git 개정 정보를 포함하는 방법은 무엇입니까?
    문제 해결을 위해 Go 바이너리에 Git 개정 정보를 포함하는 방법은 무엇입니까?
    Go 바이너리에서 Git 개정 확인코드를 배포할 때 바이너리를 빌드된 Git 개정과 연결하는 것이 도움이 될 수 있습니다. 문제 해결 목적. 그러나 개정 번호로 소스 코드를 직접 업데이트하는 것은 소스를 변경하므로 불가능합니다.해결책: 빌드 플래그 활용이 문제에 대한 ...
    프로그램 작성 2024-11-05에 게시됨
  • 일반적인 HTML 태그: 관점
    일반적인 HTML 태그: 관점
    HTML(HyperText Markup Language)은 웹 개발의 기초를 형성하며 인터넷의 모든 웹페이지 구조 역할을 합니다. 2024년 가장 일반적인 HTML 태그와 고급 용도를 이해함으로써 개발자는 보다 효율적이고 접근 가능하며 시각적으로 매력적인 웹 페이지를 ...
    프로그램 작성 2024-11-05에 게시됨
  • CSS 미디어 쿼리
    CSS 미디어 쿼리
    웹사이트가 다양한 기기에서 원활하게 작동하도록 보장하는 것이 그 어느 때보다 중요합니다. 사용자가 데스크톱, 노트북, 태블릿, 스마트폰에서 웹사이트에 액세스함에 따라 반응형 디자인이 필수가 되었습니다. 반응형 디자인의 중심에는 개발자가 사용자 기기의 특성에 따라 다양한...
    프로그램 작성 2024-11-05에 게시됨
  • JavaScript의 호이스팅 이해: 종합 가이드
    JavaScript의 호이스팅 이해: 종합 가이드
    자바스크립트에서 호이스팅 호이스팅은 변수 및 함수 선언을 포함 범위(전역 범위 또는 함수 범위)의 맨 위로 이동(또는 "호이스팅")하는 동작입니다. 코드가 실행됩니다. 즉, 코드에서 실제로 선언되기 전에 변수와 함수를 사용할 수 있습니...
    프로그램 작성 2024-11-05에 게시됨
  • Stripe를 단일 제품 Django Python Shop에 통합
    Stripe를 단일 제품 Django Python Shop에 통합
    In the first part of this series, we created a Django online shop with htmx. In this second part, we'll handle orders using Stripe. What We'll...
    프로그램 작성 2024-11-05에 게시됨
  • Laravel에서 대기 중인 작업을 테스트하기 위한 팁
    Laravel에서 대기 중인 작업을 테스트하기 위한 팁
    Laravel 애플리케이션으로 작업할 때 명령이 비용이 많이 드는 작업을 수행해야 하는 시나리오를 접하는 것이 일반적입니다. 기본 프로세스를 차단하지 않으려면 대기열에서 처리할 수 있는 작업으로 작업을 오프로드하기로 결정할 수 있습니다. 예제를 살펴보겠습니다. app:...
    프로그램 작성 2024-11-05에 게시됨
  • 인간 수준의 자연어 이해(NLU) 시스템을 만드는 방법
    인간 수준의 자연어 이해(NLU) 시스템을 만드는 방법
    Scope: Creating an NLU system that fully understands and processes human languages in a wide range of contexts, from conversations to literature. ...
    프로그램 작성 2024-11-05에 게시됨
  • JSTL을 사용하여 HashMap 내에서 ArrayList를 반복하는 방법은 무엇입니까?
    JSTL을 사용하여 HashMap 내에서 ArrayList를 반복하는 방법은 무엇입니까?
    JSTL을 사용하여 HashMap 내에서 ArrayList 반복웹 개발에서 JSTL(JavaServer Pages Standard Tag Library)은 JSP( 자바 서버 페이지). 그러한 작업 중 하나는 데이터 구조를 반복하는 것입니다.HashMap과 그 안에 포...
    프로그램 작성 2024-11-05에 게시됨
  • Encore.ts — ElysiaJS 및 Hono보다 빠릅니다.
    Encore.ts — ElysiaJS 및 Hono보다 빠릅니다.
    몇 달 전 우리는 TypeScript용 오픈 소스 백엔드 프레임워크인 Encore.ts를 출시했습니다. 이미 많은 프레임워크가 있으므로 우리는 우리가 내린 흔하지 않은 디자인 결정과 그것이 어떻게 놀라운 성능 수치로 이어지는지 공유하고 싶었습니다. 성능 ...
    프로그램 작성 2024-11-05에 게시됨
  • 문자열 리터럴에서 +를 사용한 문자열 연결이 실패하는 이유는 무엇입니까?
    문자열 리터럴에서 +를 사용한 문자열 연결이 실패하는 이유는 무엇입니까?
    문자열 리터럴을 문자열과 연결C에서는 연산자를 사용하여 문자열과 문자열 리터럴을 연결할 수 있습니다. 그러나 이 기능에는 혼란을 초래할 수 있는 제한 사항이 있습니다.질문에서 작성자는 문자열 리터럴 "Hello", ",world" 및...
    프로그램 작성 2024-11-05에 게시됨
  • React Re-Rendering: 최적의 성능을 위한 모범 사례
    React Re-Rendering: 최적의 성능을 위한 모범 사례
    React의 효율적인 렌더링 메커니즘은 React가 인기를 얻는 주요 이유 중 하나입니다. 그러나 애플리케이션이 복잡해짐에 따라 구성 요소 다시 렌더링을 관리하는 것이 성능을 최적화하는 데 중요해졌습니다. React의 렌더링 동작을 최적화하고 불필요한 재렌더링을 방지하...
    프로그램 작성 2024-11-05에 게시됨
  • 조건부 열 생성을 달성하는 방법: Pandas DataFrame에서 If-Elif-Else 탐색?
    조건부 열 생성을 달성하는 방법: Pandas DataFrame에서 If-Elif-Else 탐색?
    조건부 열 생성: Pandas의 If-Elif-Else주어진 문제에서는 DataFrame에 새 열을 추가해야 합니다. 일련의 조건부 기준을 기반으로 합니다. 문제는 코드 효율성과 가독성을 유지하면서 이러한 조건을 구현하는 것입니다.함수 적용을 사용한 솔루션한 가지 접근...
    프로그램 작성 2024-11-05에 게시됨
  • 큐를 소개합니다!
    큐를 소개합니다!
    원시 SQL을 다시 재미있게 만들기 위해 설계된 실용적인 SQL 쿼리 실행기인 Qiu의 출시를 발표하게 되어 기쁩니다. 솔직하게 말하면 ORM이 그 자리를 차지하지만 간단한 SQL을 작성하는 것만으로도 약간 부담스러울 수 있습니다. 저는 항상 원시 SQL 쿼리를 작성하...
    프로그램 작성 2024-11-05에 게시됨

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3