ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ lazy๋ ๋ฌด์์ธ๊ฐ์?
React์ **lazy**๋ ํ์ํ ๋๋ง ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ด์์.
์ฝ๊ฒ ๋งํด, ์ปดํฌ๋ํธ๋ฅผ ๊ฒ์ผ๋ฅด๊ฒ(lazily) ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ํ๋ฉด์ ๋ณด์ฌ์ค ์ค๋น๊ฐ ๋ ๋๋ง ๋ก๋ฉํฉ๋๋ค.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ: ํ๋ฒ๊ฑฐ ๊ฐ๊ฒ ์ด์ผ๊ธฐ
์ฌ๋ฌ๋ถ์ด ํ๋ฒ๊ฑฐ ๊ฐ๊ฒ๋ฅผ ์ด์ํ๋ค๊ณ ์๊ฐํด ๋ณด์ธ์. ๐
- ๋ชจ๋ ๋ฉ๋ด๋ฅผ ํ ๋ฒ์ ์ค๋นํ๋ฉด?
- ์๋์ด ์ธ์ ์ด๋ค ๋ฉ๋ด๋ฅผ ์ฃผ๋ฌธํ ์ง ๋ชฐ๋ผ์ ๋ชจ๋ ํ๋ฒ๊ฑฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ค๊ณ ๊ฐ์ ํด์.
- ๊ทธ๋ฌ๋ฉด ๋์ฅ๊ณ ์ ํ๋ฒ๊ฑฐ๊ฐ ์์ด๊ณ , ์ฌ๋ฃ ๋ญ๋น๋ ๋ง์์ง๊ฒ ์ฃ ?
- lazy๋ฅผ ์ฌ์ฉํ๋ฉด?
- ์๋์ด ํน์ ๋ฉ๋ด๋ฅผ ์ฃผ๋ฌธํ ๋๋ง ํ๋ฒ๊ฑฐ๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ์ ๊ณตํด์.
- ์ด๋ ๊ฒ ํ๋ฉด ๋ถํ์ํ ๋ญ๋น ์์ด ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ ๊ณตํ ์ ์์ด์.
React์ **lazy**๋ ๋๊ฐ์์!
๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ํ ๋ฒ์ ๋ถ๋ฌ์ค๋ ๋์ , ํ์ํ ๋๋ง ๊ฐ์ ธ์์ ์ฑ๋ฅ์ ์ต์ ํํด์ค๋๋ค.
๐ ๏ธ React์์ lazy ์ฌ์ฉ๋ฒ
React์์ **lazy**๋ React.lazy() ํจ์๋ฅผ ์ฌ์ฉํด์ ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๋ถ๋ฌ์ต๋๋ค.
์ฃผ๋ก **์ฝ๋ ๋ถํ (Code Splitting)**์ ์ํด ์ฌ์ฉํด์.
1. ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: ์ปดํฌ๋ํธ๋ฅผ lazyํ๊ฒ ๋ถ๋ฌ์ค๊ธฐ
์๋ฅผ ๋ค์ด, MyComponent๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๋ถ๋ฌ์ ๋ณผ๊ฒ์.
ํ์ผ ๊ตฌ์กฐ
src/
โโโ components/
โ โโโ MyComponent.jsx
โโโ App.jsx
MyComponent.jsx (๋ถ๋ฌ์ฌ ์ปดํฌ๋ํธ)
import React from 'react';
export default function MyComponent() {
return <h1>์๋
ํ์ธ์! ์ ๋ Lazy Component์
๋๋ค ๐</h1>;
}
App.jsx (lazy ์ฌ์ฉ)
import React, { Suspense, lazy } from 'react';
// lazy๋ฅผ ์ฌ์ฉํด MyComponent๋ฅผ ๋์ ์ผ๋ก ๋ถ๋ฌ์ค๊ธฐ
const MyComponent = lazy(() => import('./components/MyComponent'));
function App() {
return (
<div>
<h1>React lazy ์์ </h1>
<Suspense fallback={<p>๋ก๋ฉ ์ค...</p>}>
<MyComponent /> {/* MyComponent๋ฅผ ํ์ํ ๋๋ง ๋ถ๋ฌ์ด */}
</Suspense>
</div>
);
}
export default App;
๐ ์ฝ๋ ์ค๋ช
- React.lazy()
- React.lazy()๋ฅผ ์ฌ์ฉํด ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
- ์ฌ๊ธฐ์ **import('./components/MyComponent')**๋ ์ค์ ๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋์์.
- Suspense ์ปดํฌ๋ํธ
- Suspense๋ lazy ์ปดํฌ๋ํธ๊ฐ ๋ก๋ฉ๋ ๋ ๋ณด์ฌ์ค ํ๋ฉด์ ์ค์ ํฉ๋๋ค.
- fallback ์์ฑ์ผ๋ก ๋ก๋ฉ ์ค์ ๋ณด์ฌ์ค UI๋ฅผ ์ค์ ํ ์ ์์ด์.
- ์๋ฅผ ๋ค์ด <p>๋ก๋ฉ ์ค...</p>๋ฅผ ํ์ํด์ค๋๋ค.
- MyComponent์ ๋ก๋ฉ
- App ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง๋ ๋ MyComponent๋ ๋ถ๋ฌ์ค์ง ์์ต๋๋ค.
- MyComponent๊ฐ ํ๋ฉด์ ๋ํ๋ ๋๋ง ๋ถ๋ฌ์ต๋๋ค.
๐ lazy๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ์
- ์ฑ ์ฑ๋ฅ ์ต์ ํ
- ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ํ ๋ฒ์ ๋ถ๋ฌ์ค์ง ์๊ณ ํ์ํ ๋๋ง ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ ธ์.
- ์ฝ๋ ๋ถํ (Code Splitting)
- ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋๋์ด ๊ด๋ฆฌํ ์ ์์ด์.
- ์ฌ์ฉ์์๊ฒ ํ์ํ ๋ถ๋ถ๋ง ๋น ๋ฅด๊ฒ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
- ์ ์ฐํ ๋ก๋ฉ ํ๋ฉด ์ค์
- Suspense๋ฅผ ์ฌ์ฉํด ๋ก๋ฉ ํ๋ฉด์ ์์ ๋กญ๊ฒ ์ปค์คํฐ๋ง์ด์งํ ์ ์์ด์.
โ ๏ธ ์ฃผ์ํ ์
- Suspense๋ ๋ฐ๋์ ํ์ํด์
- React.lazy๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์,
๋ก๋ฉ ์ค์ ๋ญ ๋ณด์ฌ์ค์ง Suspense๋ฅผ ํตํด ์ค์ ํด์ผ ํด์.
- React.lazy๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์,
- ๋ผ์ฐํ
๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ
- React Router์ ํจ๊ป ์ฌ์ฉํ๋ฉด ํ์ด์ง ๋จ์๋ก lazyํ๊ฒ ๋ถ๋ฌ์ค๋ ๊ฒ๋ ๊ฐ๋ฅํด์.
๐ ๊ฒฐ๋ก : React.lazy๋ ๋ฌด์์ธ๊ฐ์?
React์ **lazy**๋ ์ปดํฌ๋ํธ๋ฅผ ํ์ํ ๋๋ง ๋ถ๋ฌ์์ ์ฑ๋ฅ์ ์ต์ ํํด์ฃผ๋ ๊ธฐ๋ฅ์ด์์.
์ด๋ ๊ฒ ๋์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ค๋ฉด ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ ๋ถ๋๋ฝ๊ฒ ๋ง๋ค ์ ์๋ต๋๋ค.
๐ ํ ์ค ์์ฝ
React.lazy๋ ์ปดํฌ๋ํธ๋ฅผ "๊ฒ์ผ๋ฅด๊ฒ" ๋ถ๋ฌ์์ ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด์์!
๐ ๋ง๋ฌด๋ฆฌ
- ํ์ํ ๋๋ง ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์์ ์ฑ๋ฅ์ ์ต์ ํํ๋ค
- **Suspense**๋ก ๋ก๋ฉ ํ๋ฉด์ ์ค์ ํด์ค๋ค
'web > react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
startTransition (0) | 2024.12.16 |
---|---|
memo (0) | 2024.12.16 |
forwardRef (0) | 2024.12.16 |
createContext (0) | 2024.12.16 |
cache (0) | 2024.12.16 |
- Total
- Today
- Yesterday
- react
- ๋ฐ์ดํฐ์ ์ง
- useinsertioneffect
- dns-prefetch
- preconnect
- prefetchdns
- finddomnode
- ๋ฒ ํ
- ์คํ์
- useformstatus
- useRef
- useid
- react hook
- Store
- experimental_taintobjectreference
- experimental
- Props
- component
- state
- ์ต์ ๋ฐ์ดํฐ
- react dom hook
- ์ํ๊ด๋ฆฌ
- ์ธ๋ถํฐํธ
- flushsync
- react dom
- usedeferredvalue
- ์ ์ฅ์
- experimental_taintuniquevalue
- Nextjs
- zustand
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |