webpack 기준
tree-shaking 적용 방법
1. bundle 시 commonjs로 transpile이 되면 안됨
.babelrc
https://babeljs.io/docs/babel-preset-env#modules
> Setting this to false will preserve ES modules.
{
"presets": [
["env", {
"modules": false
}]
],
"plugins": [
["transform-react-jsx", {"pragma": "h"}],
"emotion"
]
}
2. 필요한 함수만 import
// asis
import * as utils from "../../utils/utils";
// tobe
import { simpleSort } from "../../utils/utils";
3. 필요 시 side-effect 설정
- tree shaking 하기에 의존성이 있는 경우
- 사용은 안하지만 선언은 되어야 하는 경우 ex) css-in-js
4. mode를 production으로 (dev일 때는 반영이 안됨)
// npm run dev (모든 함수 임포트)
Asset Size Chunks Chunk Names
js/main.js 52.4 KiB main [emitted] main
js/vendors.js 150 KiB vendors [emitted] vendors
// npm run dev (필요한 함수만 임포트)
Asset Size Chunks Chunk Names
js/main.js 52.2 KiB main [emitted] main
js/vendors.js 150 KiB vendors [emitted] vendors
// npm run prod (필요한 함수만 임포트 + webpack mode: production)
Asset Size Chunks Chunk Names
js/vendors.a3722bf0.js 37.1 KiB 0 [emitted] vendors
js/main.003ce51f.js 20.7 KiB 1 [emitted] main
// npm run dev (필요한 함수만 임포트 + 바벨 설정)
Asset Size Chunks Chunk Names
js/main.js 60.8 KiB main [emitted] main
js/vendors.js 150 KiB vendors [emitted] vendors
// npm run prod (필요한 함수만 임포트 + 바벨 설정 + webpack mode: production)
Asset Size Chunks Chunk Names
js/vendors.b007c500.js 36.9 KiB 0 [emitted] vendors
js/main.57a38a97.js 8.45 KiB 1 [emitted] main
https://web.dev/articles/reduce-javascript-payloads-with-tree-shaking?hl=ko
트리 쉐이킹으로 자바스크립트 페이로드 줄이기 | Articles | web.dev
애플리케이션의 자바스크립트 최적화를 시작해야 할 곳을 파악하기란 쉽지 않습니다. 하지만 webpack 같은 최신 도구를 활용하는 경우 트리 쉐이킹부터 시작하는 것이 좋습니다.
web.dev
https://webpack.kr/guides/tree-shaking/
Tree Shaking | 웹팩
웹팩은 모듈 번들러입니다. 주요 목적은 브라우저에서 사용할 수 있도록 JavaScript 파일을 번들로 묶는 것이지만, 리소스나 애셋을 변환하고 번들링 또는 패키징할 수도 있습니다.
webpack.kr
'IT > web' 카테고리의 다른 글
[web] 사용되지 않는 자바스크립트 및 CSS 찾기 (0) | 2024.10.23 |
---|---|
[web] 렌더링 차단 CSS (0) | 2024.10.23 |
[web] 렌더링 트리 생성, 레이아웃 및 페인트 (0) | 2024.10.22 |
[web] Script error (0) | 2024.07.12 |
[css] Animiation 만들 때 유용한 사이트 소개 (0) | 2024.06.19 |