Next.js์์๋ ์ด๋ฏธ์ง์ ๋ํ ์ต์ ํ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ค
Next.js๋ฅผ ์ฐ์ง ์์์ ๋๋ Lazy loading๋ฑ ์ฑ๋ฅ์ ์ํด ๊ณ ๋ คํด์ผํ ์ฌํญ์ด ๋ง์๋๋ฐ Next.js์์๋ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต์ ํด์ค๋ค๊ณ ํ๋ค.
ํ๋ฒ ์ดํด๋ณด๋ฉด์ ๊ณต๋ถํด๋ณด์
Image ์ปดํฌ๋ํธ์ ๋ด์ฅ๋ ์ต์ ํ๋ ์๋์ ๊ฐ๋ค
- ํฅ์๋ ์ฑ๋ฅ - ์ต์ ์ด๋ฏธ์ง ํ์์ ์ฌ์ฉํ๋ฉฐ ๊ฐ ๋๋ฐ์ด์ค์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ํฌ๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ค
- ์๊ฐ์ ์์ ์ฑ - ์๋์ผ๋ก CLS (Cumulative Layout Shift) ๋ฅผ ๋ฐฉ์งํด์ค๋ค
- ๋น ๋ฅธ ํ์ด์ง ๋ก๋ - ์ด๋ฏธ์ง๊ฐ ๋ทฐํฌํธ์ ๋ค์ด ์์ ๋๋ง ๋ก๋๋๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์๋๊ฐ ๋น ๋ฅด๋ค
- ์ ์ฐํ ์์ - ์ธ๋ถ์ ์ ์ฅ๋ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ์๋ ํฌ๊ธฐ ์กฐ์ ์ด ๊ฐ๋ฅ
ํ์ props
src
- ์ ์ ์ผ๋ก ๊ฐ์ ธ์จ ์ด๋ฏธ์ง ํ์ผ
- ์ธ๋ถ URL ( ์ธ๋ถ url์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ณด์์์ ์ด์ ๋ก next.config.js์ remotePatterns ์์ฑ์ ์ถ๊ฐํ์ฌ์ผ ํ๋ค )
width, height
์ ์ ์ผ๋ก ๊ฐ์ ธ์จ ์ด๋ฏธ์ง ๋๋ layout="fill" ์ธ ์ด๋ฏธ์ง๋ฅผ ์ ์ธํ๊ณ width , height์์ฑ์ด ํ์ํ๋ค
์ต์ ๋ Props
layout
intrinsic (default) - ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ์ ์งํ์ง๋ง ํ๋ฉด ํฌ๊ธฐ๊ฐ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ณด๋ค ์์์ง ๊ฒฝ์ฐ ๋ถ๋ชจ ์ปจํ ์ด๋ ๋๋น์ ๋ง๊ฒ ์ถ์๋๋ค
fixed - ํ๋ฉด ํฌ๊ธฐ์ ์๊ด์์ด ์ง์ ๋ width, height๋ฅผ ์ ์งํ๋ค
responsive - ๋ถ๋ชจ๊ฐ display: block ์ด์ด์ผ ํ๋ฉฐ, ๋ถ๋ชจ ์ปจํ ์ด๋์ ํฌ๊ธฐ์ ๋ง์ถฐ์ง๋ค (์ด๋ฏธ์ง์ ๋น์จ์ ์ ์ง)
fill - ๋ถ๋ชจ๊ฐ display: relative ์ผ ๊ฒฝ์ฐ ๋ถ๋ชจ์ width, height์ ๋์ผํ๊ฒ ๋ง์ถฐ์ง๋ค. ์ฃผ๋ก objectFit๊ณผ ํจ๊ป ์ฌ์ฉ
loader
URL์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฌ์ฉ์ ์ ์ ํจ์
src, width, quality๋ฅผ props๋ก ๋ฐ์ ์ด๋ฏธ์ง์ ๋ํ URL ๋ฌธ์์ด์ ๋ฆฌํดํ๋ค.
import Image from 'next/image'
const myLoader = ({ src, width, quality }) => {
return `https://example.com/${src}?w=${width}&q=${quality || 75}`
}
const MyImage = (props) => {
return (
<Image
loader={myLoader}
src="me.png"
alt="Picture of the author"
width={500}
height={500}
/>
)
}
quality
1๋ถํฐ 100 ์ฌ์ด์ ํ๋ฆฌํฐ(default 75)๋ฅผ ์ง์ ํ๊ณ ์ซ์๊ฐ ๋์์๋ก ํ๋ฆฌํฐ๊ฐ ๋๋ค๋ ์๋ฏธ
priority
true์ธ ๊ฒฝ์ฐ ์ด๋ฏธ์ง๊ฐ ๋์ ์ฐ์ ์์์ preload๋ก ๊ฐ์ฃผ๋๋ค
LCP(Large Contentful Paint) ์์๊ฐ ๋ ์ด๋ฏธ์ง์ priority์์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค.
์ฆ, ํ์ด์ง ์๋จ์ ์คํฌ๋กค ์์ด ๋ณผ ์ ์๋ ๋ถ๋ถ์๋ง ์ฌ์ฉํด์ผํ๋ค.
๊ธฐ๋ณธ๊ฐ์ 'false'์ด๋ค
placeholder
์ด๋ฏธ์ง๊ฐ ๋ก๋๋๋ ๋์ ๋ณด์ฌ์ง placeholder์ด๋ค. ์ค์ผ๋ ํค UI์ ์ ์ฌํ๋ค๊ณ ๋ณผ ์๋ ์๊ฒ ๋ค
์ง์ ๊ฐ๋ฅํ ์์ฑ์ blur, empty ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 'empty'์ด๋ค
'blur'์์ฑ์ธ ๊ฒฝ์ฐ blurDataURL์ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์์ผ๋ฉฐ ์ ์ , ๋์ ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ ์ ์๋ค
base64๋ก ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง์ฌ์ผ ํ๋ฉฐ, 10px์ดํ์ ์ด๋ฏธ์ง๋ฅผ ๊ถ์ฅํ๋ค
'empty'์์ฑ์ธ ๊ฒฝ์ฐ์๋ ๋น ๊ณต๊ฐ๋ง ๋ณด์ฌ์ค๋ค.
loading
Next.js์์ ์ด๋ฏธ์ง์ ๊ธฐ๋ณธ ๋ก๋ ๋ฐฉ์์ LazyLoading์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ ‘lazy’์ด๋ค
lazy์ธ ๊ฒฝ์ฐ์ ๋ทฐํฌํธ์ ๊ณ์ฐ๋ ๊ฑฐ๋ฆฌ์ ๋๋ฌ ํ ๋๊น์ง ๋ก๋๋ฅผ ์ฐ๊ธฐํ๋ค
๋ฐ๋๋ก ‘eager’ ์์ฑ์ธ ๊ฒฝ์ฐ์๋ ์ด๋ฏธ์ง๋ฅผ ์ฆ์ ๋ก๋ํ๋ค
reference
'Next' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Next.js์ Pre-rendering (1) | 2022.09.11 |
|---|---|
| Next.js์ _app๊ณผ _document ์์๋ณด๊ธฐ (0) | 2022.09.05 |
| Next.js ์์๋ณด๊ธฐ (1) | 2022.08.31 |