반응형
📝Lazy Loading
렌더링하는 데 필요한 JavaScript의 양을 줄여 애플리케이션의 초기 로딩 성능을 향상시키는 데 도움이 됩니다 → 해당 라이브러리가 필요할 때만 클라이언트 번들에 포함할 수 있습니다 [청크 분리]
Next.js에서 지연 로딩 구현하는 방법은 두가지이다
- next/dynamic → React.lazy() + Suspense가 합쳐진 기능
- React.lazy() [코드스플리팅 + 지연로딩] + Suspense [로딩 기능] → 리액트에서 사용하는 방식
예제 코드
/** page.tsx **/
'use client'
import dynamic from "next/dynamic";
import {useState} from "react";
export default function Home() {
const ComponentA = dynamic(() => import('../components/A'),{loading: () => <div>A Is Loading</div>})
const ComponentB = dynamic(() => import('../components/B'))
const ComponentC = dynamic(() => import('../components/C'), { ssr: false, loading: () =><div>C Is Loading</div> })
const [showMore, setShowMore] = useState(false)
return (
<div>
<ComponentA />
{showMore && <ComponentB />}
<button onClick={() => setShowMore(!showMore)}>Toggle</button>
<ComponentC />
</div>
)
}
/** A.tsx **/
export default function A() {
return (
<div> A </div>
);
}
/** B.tsx **/
export default function B() {
return (
<div> B </div>
);
}
/** C.tsx **/
export default function C() {
return (
<div> C </div>
);
}
Lazy Loading을 사용하는 경우 클라이언트 구성요소는 기본적으로 사전 렌더링(SSR)됩니다
ssr:false 옵션으로 비활성이 가능합니다 → 좀 이상한 점이 처음에 렌더링 될 때 C는 C Is Loading이 나오고 A는 서버에서 렌더링 되어 A Is Loading이 안나오지만 Toogle을 클릭하면 둘다 Is Loading이 나오게 된다 Toogle은 훅으로 조작하고 A랑 C는 바뀐 점이 없기 때문에 가상돔 차이가 있는 B만 렌더링되어야하는데 A랑 C도 왜 그런지 모르겠다
Toggle 클릭 전 (A, C 청크 분리 확인)
Toggle 클릭 후 (B 청크 Lazy Loading 확인)
반응형
'[Next.js] > [Next 14]' 카테고리의 다른 글
[Next 14] Env 파일 적용 순서 (0) | 2024.08.14 |
---|---|
[Next 14] 분석(모니터링), Typescript, ESLint, 환경 변수, 경로 별칭, MDX (0) | 2024.01.02 |
[Next 14] 정적 데이터, 이미지, 폰트, 스크립트, 정적 메타데이터, Opengraph, 동적 메타데이터 (1) | 2024.01.02 |
[Next 14] 외부 라이브러리, 런타임(Runtime), CSS Style (0) | 2024.01.02 |
[Next 14] Server Component (SSR), Client Component (CSR) (1) | 2024.01.02 |