BH] ์น ์ฑ๋ฅ ์ต์ ํ webpack-bundle-analyzer ์ฌ์ฉ
์์คํ ์ ๊ฐ๋ฐํ๊ณ ๊ณ์ ๊ฐ๋ฐํ๊ณ ์ ์ ์์ด ๊ฐ๋ฐํ๋ค๋ณด๋ฉด, ํ์์์ด ์ฉ๋๋ง ๋๋ฆด๊ฒฝ์ฐ๊ฐ ์์ด์. ์ด๋ด๊ฒฝ์ฐ ์น์ฑ๋ฅ์ ๋จ์ด์ง๊ฒ ์ฃ ?... ์ต์ ํ๊ฐ ํ์ํ ์์ ์ด ์ฌ๊ฑฐ์์.
๋ฐ์ ์์ค์ ์ต์ ํ๊น์ง ์ ๊ฒฝ์ฐ๋ฉด์ ์์ ํ๋ฉด ์ ๋ง ์ข๊ฒ ์ง๋ง,,,,,,,(ํ์ดํ )
SPA๊ฐ์ ๊ฒฝ์ฐ ๋ชจ๋ ํ์ผ์ ๋ค ๋ถ๋ฌ์ค๋๋ฐ... ์ด๋ ๊ฒ ๋๋ฉด....์ฒจ์ ๋ก๋ฉํ๋ฉด ํ๋ฉด์ด ๊ณ์ ํ์๊ฒ ๋์ค๊ฑฐ๋ ๋ก๋ฉ๋ฐ๋ฅผ ๋ฃ์์ผ๋ฉด ํ๋ฃจ์ข
์ผ(?) ์ฅ์๊ฐ ๋ก๋ฉํ๋ค๊ฐ ๋๋๋งํ๊ฒ ๋ ๊ฑฐ์์.
๊ทธ๋์ ์ด๋ฒ์ ์ต์ ํ๋ฅผ ์ข ํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ์๋์กฐ๋ ์์ ์ ์์ํ์ต๋๋ค.
์ผ๋จ ์ต์ ํ๋ฅผ ํ๊ธฐ ์ํด์๋ ์ด๋ ๋ถ๋ถ๋ถํฐ ์๋์ผํ ์ง ๋ง๋ง ํ ์๋์์ด์. ํ๋ก์ ํธ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด..์ต์ ํํ ๊ฒ ์์ ์๋์๊ฒ ๋ค์.
์๋ฌดํผ ์ต์ ํ๋ฅผ ํ๊ธฐ ์ํด์ webpack-bundle-analyzer ์ด๊ฒ์ ์ฌ์ฉํ์ต๋๋ค.
์ต์ ํ์ ๊ณผ์ ์ ์๋์ ๊ฐ์ด ์งํํ์ต๋๋ค.
- webpack-bundle-analyzer ์ด๋ค ๋ถ๋ถ์ด ์ฉ๋์ ๋ง์ด ์ฐจ์งํ๊ณ ์๋์ง
- code split์ ๋์ด์๋์ง
- garbage ์ ๊ฑฐ
webpack-bundle-analyzer
# NPM
npm install --save-dev webpack-bundle-analyzer
npm install --save laravel-mix-bundle-analyzer //laravel-mix๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ๊ตณ์ด ์ค์นํ์ง ์์๋ ๋๋ต๋๋ค.
# Yarn
yarn add -D webpack-bundle-analyzer
webpack.mix.js
require('laravel-mix-bundle-analyzer');
if (!mix.inProduction()) {
mix.bundleAnalyzer();
}
webpack.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin()
]
}
์ดํ ๋น๋๋ฅผ ํ๊ฒ ๋๋ฉด webpack-bundle-analyzer ์คํ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด ์ค์น๋์ด์๋ ํจํค์ง๋ค์ด ์์ต๋๋ค.
๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋ณด๋ฉด ํจํค์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ด ๋์ค๋ค์.
aws-amplify๊ฐ์ ๊ฒฝ์ฐ๋ ์ ์ฒด์ 5.61mb์ด๋ค์. ใ ใ
์ด๋ ๊ฒ ์ ์ผ ๋ฌด๊ฑฐ์ด ์ ๋ค์ ํ๋ฉด์์ ํฌ๊ฒ ํ์๊ฐ ๋๊ณ ์์์ ๋ค์ ์์ฒญ ์๊ฒ ๋ณด์ฌ์.
์ด ๊ธฐ์ค์ผ๋ก ํฌ๊ฒ ํ์๋ ์์ด๋ค๋ง ์ ํ์ธํด์ ๋์ฑ๊ฐ๋ฅํ ํจํค์ง๊ฐ ์์ผ๋ฉด ๋ณ๊ฒฝํ๊ณ ์ฌ์ฉํ์ง์์ผ๋ฉด ์ง์ฐ๊ณ
์ต์ ํ๋ฅผ ํ ์ ์์ผ๋ฉด ์ต์ ํ๋ฅผ ํ์ ์ผํด์.
์ต์ ํ๋ฅผ ๊ณ์ ์งํํ๋ค ๋น๋๋ฅผ ํด๋ณด์๋ฉด ํ์คํ ์ฐจ์ด๊ฐ ์์๊ฑฐ์์.
์ต์ ํ ํ๊ธฐ์ ์๋ 5MB์์ด์.
์ต์ ํ ํ์๋ 4MB๋ค์.
๋ฌผ๋ก ์ฌ์ฉํ๊ฒฝ์ด ์ข์ ๊ณณ์์๋ ์ผ๋ง๋ ์ฐจ์ด๊ฐ ๋ ๊น์?
๋ณ๋ก ์ฐจ์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค..
์ฌ์ฉํ๊ฒฝ์ด ์ข์ง ์์ ๊ณณ์์๋ ์ต์ ํ์ ํจ๊ณผ๊ฐ ์ข ๋ํ๋์ง์์๊น ์ถ์ด์.
code split
import T from 'T'
์ด๋ ๊ฒ ๋ถ๋ฌ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ T ํจํค์ง๊ฐ 1MB๋ฉด ๊ณ ์ค๋ํ ๋ค ๋ค๊ณ ์ค๊ฒ๋์ด์.
๊ทธ๋ ๊ฒ ๋๋ฉด ์ ์ ์ฌ์ฉํ๋๊ฑด ๋ช๊ฐ ์๋๋๋ฐ ์์คํ ๋ง ๋ฌด๊ฒ๊ฒ ๋ง๋๋ ๊ผด์ด ๋์ด๋ฒ๋ฆฌ์ฃ .
๊ทธ๋์ ํ์ํ ๊ธฐ๋ฅ importํด์ ์ฌ์ฉํ๋๊ฒ ๋์ ๊ฒ ๊ฐ์์.
import { T1, T2 } from 'T'
๋ฌผ๋ก ์ด๊ฒ ํญ์ ์ ๋ต์ ์๋ ์๋์์ด์.
์ ๊ทธ๋ฆฌ๊ณ vue.js ๊ฐ์ ๊ฒฝ์ฐ์๋ component๋ฅผ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ํธ์ถํด์ ๋๋๋ง ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ๋ ์์ด์.
garbage ์ ๊ฑฐ
์ ๋ง ํ์์๋ ํ์ผ๋ค์ ์ง์์ฃผ๋๊ฒ ์ข์ ๊ฒ ๊ฐ์์.
๊ท์ฐฎ์์ ์ ๊ด๋ฆฌ๋ ์ํ๊ณ ์์์ง๋ง, ์ด๋ฒ๊ธฐํ์ ๋ค ์ง์๋ณด๊ธฐ๋ก ํ์ด์.
์ด์ฐจํผ github๊ฐ ์์ผ๋๊น ๊ด์ฐฎ์๊ฑฐ๋๋๋ค.