나무를 흔들어 잔가지를 털어내듯 불필요한 코드를 제거하는 것을 의미한다.
- 웹 개발을 할 때, 애플리케이션의 규모가 커지면서 코드의 양이 방대해지고, 다양한 라이브러리를 가져다 사용하게 되면 불필요한 코드를 그대로 가져가는 경우가 생각보다 많이 생긴다.
이런 불필요한 코드들을 찾아내어 제거하면 웹 사이트 성능 최적화에 큰 도움이 된다.
JavaScript 파일 크기의 증가, 요청 횟수의 증가
위와 같은 이유로 파일이 오고 가는 동안 화면 표시가 늦어지고 네트워크 속도가 느린 환경에서는 더 큰 병목현상을 유발한다.
따라서 트리쉐이킹을 통해 파일 크기를 가능한 줄이는 것이 최적화에 도움이 된다.
JavaScript 파일의 실행 시간 증가
코드 실행까지 거쳐야 하는 과정이 많기 때문에 JavaScript는 다른 리소스에 비해서 실행까지 상대적으로 많은 시간을 소모한다.
avaScript 파일의 크기가 커진 만큼, 파일의 실행 시간 또한 증가한 것이다.
JavaScript 파일의 실행은 CPU에 크게 영향을 받는데, 그렇다 보니 사양이 천차만별인 모바일 환경에서 그 영향이 더욱 두드러진다.
따라서 이탈률을 막기 위해 트리쉐이킹을 통한 최적화가 필요하다.
웹팩 4버전 이상을 사용하는 경우에는 ES6 모듈(import, export를 사용하는 모듈)을 대상으로는 기본적인 트리쉐이킹을 제공한다
Create React App을 통해 만든 React 애플리케이션도 웹팩을 사용하고 있기 때문에 트리쉐이킹이 가능하다.
이는 나쁜 예시이다 이렇게하면 React의 모든 코드가 불려 온다
//좋은예
import { useState, useEffect } from 'react'
위처럼 실제로 사용할 코드만 불러와준다.
불러오지 않은 코드는 빌드할 때 제외되므로 코드의 크기를 줄일 수 있다.
{
“presets”: [
[
“@babel/preset-env”,
{
"modules": false
}
]
]
}
modules 값을 true로 설정하면 항상 ES5 문법으로 변환하므로 주의해서 작성해야한다.
// 애플리케이션 전체에서 사이드 이펙트가 발생하지 않을 때
{
"name": "tree-shaking",
"version": "1.0.0",
"sideEffects": false
}
//특정 파일에서는 발생하지 않을 것임을 알려준다.
{
"name": "tree-shaking",
"version": "1.0.0",
"sideEffects": ["./src/components/NoSideEffect.js"]
}