66651
πŸ‘€
66651
  • λΆ„λ₯˜ 전체보기 (57)
    • note (28)
    • log (13)
    • error (9)
    • etc (7)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
66651

πŸ‘€

note

[Next.js] Dynamic Imports

Next.jsμ—μ„œμ˜ Lazy Loading

Lazy Loading은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μš”κ΅¬λ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό ν•„μš”ν•  λ•Œλ§Œ λ‘œλ“œν•΄μ„œ λ‘œλ”© 속도λ₯Ό κ°œμ„ ν•˜κ³  μ‚¬μš©μž κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€λŠ” μ „λž΅μ΄λ‹€.

 

Next.js μ—μ„œ Lazy Loading 을 μ μš©ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” 두 κ°€μ§€κ°€ μžˆλ‹€.

1. Dynamic Imports 

2. React.lazy()와 Suspense

 

 

React.lazy()와 Suspense

React.lazy()λŠ” Reactμ—μ„œ μ œκ³΅ν•˜λŠ” λ‚΄μž₯ κΈ°λŠ₯으둜 μ½”λ“œλ₯Ό λΆ„ν• ν•˜μ—¬ ν•„μš”ν•œ μ‹œμ μ— λΉ„λ™κΈ°μ μœΌλ‘œ λ‘œλ“œν•  수 μžˆλ„λ‘ ν•œλ‹€.

이와 ν•¨κ»˜ SuspenseλŠ” lazy μ»΄ν¬λ„ŒνŠΈκ°€ λ‘œλ“œ λ˜λŠ” λ™μ•ˆ λŒ€μ²΄ν•΄μ„œ 보여쀄 μš”μ†Œλ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

 

React ν”„λ‘œμ νŠΈ μ‹œ React Router λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν•¨κ»˜ μ‚¬μš©ν•΄μ„œ νŽ˜μ΄μ§€ μ „ν™˜ λ‘œλ”© μ€‘μ—λŠ” λ‹€λ₯Έ νŽ˜μ΄μ§€μ™€ μƒν˜Έμž‘μš©ν•˜μ§€ μ•Šλ„λ‘ 막을 수 μžˆλ‹€.

import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';

const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));

const App = () => (
  <Router>
    <Suspense fallback={<div>Loading...</div>}>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </Suspense>
  </Router>
);

 

 

next/dynamic

next/dynamic은 React.lazy()와 Suspense의 κΈ°λŠ₯을 λͺ¨λ‘ ν•©μΉœ 것이닀.

dynamic ν•¨μˆ˜λŠ” λ™μ μœΌλ‘œ λ‘œλ“œν•  μ»΄ν¬λ„ŒνŠΈμ™€ κ΄€λ ¨λœ μ„€μ • 객체λ₯Ό 인자둜 λ°›λŠ”λ‹€. 두 번째 인자의 μ˜΅μ…˜μœΌλ‘œ loading을 ν™œμš©ν•˜λ©΄ Suspense의 fallback을 μ‚¬μš©ν•œ 것 처럼 ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈκ°€ λ‘œλ”© 쀑인 κ²½μš°μ— 보여쀄 μš”μ†Œλ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

import dynamic from 'next/dynamic';
 
const DynamicHeader = dynamic(() => import('../components/header'), {
  loading: () => <p>Loading...</p>,
});
 
export default function Home() {
  return <DynamicHeader />;
}

 

suspense μ˜΅μ…˜μ„ ν™œμš©ν•˜λ©΄ react의 Suspense와 μœ μ‚¬ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

import dynamic from 'next/dynamic';
 
const DynamicHeader = dynamic(() => import('../components/header'), {
  suspense: true,
});
 
export default function Home() {
  return (<Suspense fallback={<p>Loading...</p>}>
    <DynamicHeader />
  </Suspense>);
}

 

 

μ°Έκ³ 

https://react.dev/reference/react/lazy

 

https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading

 

https://ko.legacy.reactjs.org/docs/code-splitting.html#route-based-code-splitting

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
    'note' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • Jekyll ν…Œλ§ˆλ₯Ό μ‚¬μš©ν•œ Github λΈ”λ‘œκ·Έ λ§Œλ“€κΈ° (window)
    • [CSS] transfrom μŠ€νƒ€μΌμ΄ 적용된 μš”μ†Œμ˜ μžμ‹μš”μ†Œμ—μ„œ position: fixedκ°€ μ μš©λ˜μ§€ μ•ŠλŠ” 이유
    • [Next.js] import κ²½λ‘œμ— @별칭 μ‚¬μš©ν•˜κΈ°
    • Node.js둜 CRA μ‹œ κΈ°λ³Έ 파일과 폴더 ν•œ λ²ˆμ— μ„ΈνŒ…ν•˜κΈ°
    66651
    66651
    always awake

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”