Skip to main content

리액트 성능 향상 - 1. Lazy Loading

import React from "react";
import { Switch, Route } from "react-router-dom";
import "./App.css";
import ListPage from "./pages/ListPage/index";
import ViewPage from "./pages/ViewPage/index";

function App() {
return (
<div className="App">
<Switch>
<Route path="/" component={ListPage} exact />
<Route path="/view/:id" component={ViewPage} exact />
</Switch>
</div>
);
}

export default App;

다음과 같은 코드를 렌더링 하면 크롬에서의 퍼포먼스와 fetching하는 파일들은 다음과 같습니다.

퍼포먼스

image

앱이 로드 되자마자 ListPage, ViewPage에 관련된 모든 js 파일이 다 업로드 됐습니다.

image

image

0.chunk.js의 로딩 시간이 22ms

다음의 상황에서 퍼포먼스 향상을 위해서

Lazy Loading을 이용해서 필요할 때만 컴포넌트를 렌더링 하는 방법을 사용할 겁니다.

Lazy Loading

import React, { Suspense } from "react";
import { Switch, Route } from "react-router-dom";
import "./App.css";

const ListPage = React.lazy(() => import("./pages/ListPage/index"));
const ViewPage = React.lazy(() => import("./pages/ViewPage/index"));

function App() {
return (
<div className="App">
<Suspense fallback={<p>loading...</p>}>
<Switch>
<Route path="/" component={ListPage} exact />
<Route path="/view/:id" component={ViewPage} exact />
</Switch>
</Suspense>
</div>
);
}

export default App;

Suspense로 감싸지 않으면 다음과 같은 에러를 마주할 수 있습니다.

image

Lazy Loading을 적용한 결과는 다음과 같습니다.

image

ViewPage에 해당하는 URL로 이동 시, ViewPage이 렌더링 되면서

그에 해당하는 2.chunk.js, 5.chunk.js가 로드 됩니다.

image

3.chunk.js 파일 로드 시간이 6ms로 줄었습니다.

image

퍼포먼스도 20점이나 오른 것을 볼 수 있습니다.

image