โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋จผ์ ๋น๋๋ง์ผ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ์ ๋ ํ์ผ๋ค์ ์ฉ๋์ด ๋งค์ฐ ํฐ ๊ฒ์ํ์ธํ ์ ์์๋ค.
๋ฒ๋ค ํฌ๊ธฐ์ ๋ํด์ ์ข ๋ ์์ธํ ํ์ธํด๋ณด๊ธฐ ์ํด์ bundle-analyzer๋ฅผ ์ ์ฉํด๋ณด์๋ค.
npm install @next/bundle-analzyser
๋๋ yarn add @next/bundle-analyer
๋ช
๋ น์ด๋ก ์ค์น๋ฅผ ํ๊ณ next.config.js ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฉํ๋ค.
// next.config.js
const withBundleAnalyzer = require("@next/bundle-analyzer")({
enabled: process.env.ANALYZE === "true",
});
module.exports = withBundleAnalyzer({});
๊ทธ ํ ANALYZE=true next build
๋ช
๋ น์ด๋ก ์คํ์ ํ๋ฉด client.html
๊ณผ server.html
๋ก ๋๋์ด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ฏ์ด client์์๋ chakra-ui
๊ฐ ๋๋ถ๋ถ์ ์ฉ๋์ ์ฐจ์งํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
server์์๋ router์ ์ ์ธํ๊ณ /products/productId
, /product
๋ฑ์ ํ์ผ์์ ๋ง์ ์ฉ๋์ ์ฐจ์งํ๊ณ ์๋ค.
๋น๋๋ง์ผ ํ๋ก์ ํธ์์๋ ๋ชจ๋ ํ์ด์ง์์ chakra-ui๊ฐ์ ธ์จ ๋ชจ๋๋ค์ ์ฌ์ฉํ๊ณ ์๊ณ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ๋งค์ฐ ํฐ ๊ฒ์ ๋ถ์ ๊ฒฐ๊ณผ๋ก ํ์ธํ ์ ์์๋ค.
๋ฐ๋ผ์ chakra-ui์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ์ง ๋ชฐ๋ผ์ ๊ตฌ๊ธ๋ง์ ํด๋ณด์๋ค.
๊ทธ ์ค chakra-ui ๊นํ๋ธ์ discussions์ issues์ ์ฌ๋ผ์จ ๋ด์ฉ์ด ์์๋ค.
Reduce theme bundle size์ Chakra 2.x needs to reduce considerably JS bundle size์ ๋ด์ฉ์ ํ์ธํด ๋ณด๋ฉด chakra-ui์ framer-motion
์ด ๋ง์ ์ฉ๋์ ์ฐจ์งํ๊ณ ์๊ณ ์ง๊ธ ํ์ฌ๋ก๋ ์ฌ์ด์ฆ๋ฅผ ์ค์ผ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ํ๋ค. (๋ง์ฝ chakra์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ๋๊ธ๋ก ๋ถํ๋๋ฆฝ๋๋ค.)
server ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ์ค์ด๊ธฐ ์ํด ํ์ด์ง์ ์ฌ์ด์ฆ๊ฐ ํฐ ํ์ผ๋ค์ next/dynamic
์ ์ฌ์ฉํด์ ์คํฌ๋ฆฝํธ๊ฐ ๋์ ๋ก๋ฉ ๋ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ ํ์๋ค.
import dynamic from 'next/dynamic';
const DynamicHeader = dynamic(() => import('./Header'));
์์ ๊ฐ์ ํ์์ผ๋ก dynamic์ ์ ์ฉ์์ผฐ๋ค.
์์๋ก ์ํ ์์ธ ํ์ด์ง์ ์ํ ์ถ๊ฐ ํ์ด์ง ๋ ํ์ด์ง๋ฅผ ๋น๊ตํด๋ณด๊ฒ ๋ค.
๋ ํ์ผ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ๋ฒ๋ค ์ฌ์ด์ฆ๊ฐ ๋งค์ฐ ์ค์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ํ ์์ธ ํ์ด์ง๋ 28kb๋ ์ค์๊ณ ์ํ ์ถ๊ฐ ํ์ด์ง๋ 16kb์ค์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ฌ๋ฌ ํ์ด์ง์ next/dynamic์ ์ ์ฉํ์ ๊ฒฝ์ฐ ์ ๊ณผ ํ์ ๋ฒ๋ค ์ฌ์ด์ฆ๋ค์ด ๋ง์ด ์ค์ด๋ ๊ฒ์ ํ ๋์ ํ์ธํ ์ ์์๋ค.
์ฒ์ ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด์ ์์ํ ์์ ์ด์ง๋ง ๊ฒฐ๊ตญ chakra-ui๋ก ์ธํด ํด๋ผ์ด์ธํธ ์๋๋ ๊ฐ์ ํ์ง ๋ชปํ๋ค. ํ์ง๋ง bundle-analyzer์ ์ ์ฉ์ ํด์ ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ์ด๋ป๊ฒ ์ดํด๋ณด๋์ง ์ ์ ์์๊ณ next/dynamic์ ์ ์ฉํด์ ์ค์ ๋ก ์ฌ์ด์ฆ๊ฐ ์ด๋ป๊ฒ ๊ฐ์ ๋๋์ง ํ ๋์ ํ์ ํ ์ ์์ด์ ์ข์๋ค.