실제로 사용되지 않는 코드를 제거하는 기법입니다.
최종 번들의 크기를 줄이고, 애플리케이션의 로딩 속도와 성능을 향상시켜줍니다.
ES2015 모듈 구문은 정적 구조에 의존합니다.
이름과 개념은 ES2015 모듈 번들러의 rollup에 의해 대중화되었습니다.
어떤 응용 프로그램에서도 코드 크기를 상당히 줄일 수 있습니다.
즉, 보낼 코드가 적을수록 애플리케이션이 더 성능적으로 우수해집니다.
Tree shaking
은 주로 Rollup과 Webpack 번들러에서 구현되어 있습니다.
모듈 번들러가 애플리케이션의 모든 모듈을 분석하고, 사용되지 않는 코드를 식별하여 제거하는 과정입니다.
이 과정에서 모듈 간의 종속성을 분석하여 사용되지 않는 코드 경로를 찾고, 이를 제거하여 최종 번들의 크기를 줄입니다.
주로 함수, 클래스, 변수 등의 정적 코드를 최적화합니다.
특히, 사용되지 않는 함수, 클래스, 변수 등이 포함된 모듈은 효과적으로 제거될 수 있으며, 이는 최종 번들의 크기를 크게 줄일 수 있습니다.
주로 정적 코드에 적용되므로 동적으로 생성되는 코드나 eval() 함수를 사용하는 코드에는 적용되지 않습니다.
Tree shaking
을 위해 사용되는 모듈 시스템이 정확하게 지원되지 않는 경우에도 효과적으로 동작하지 않을 수 있습니다.
요약
: Tree shaking과 Code splitting은 모두 웹 애플리케이션의 성능을 향상시키기 위한 최적화 기법입니다만, 그 방향성과 작동 원리에서 차이가 있습니다. Tree shaking은 번들 크기를 줄이는 데 중점을 두고 있으며, 사용되지 않는 코드를 제거하는 데 초점을 맞춥니다. 반면에 Code splitting은 애플리케이션을 더 작은 조각으로 나누어 초기 로딩 시간을 최적화하는 데 중점을 두고 있습니다.
Tree shaking
은 번들에 포함된 코드 중에서 사용되지 않는 코드를 제거하여 번들 크기를 줄이는 기술입니다. 일반적으로 JavaScript 프로젝트에서 사용되며, 모듈 시스템(예: ES6의 import/export)을 통해 코드를 구성할 때 효과적으로 적용됩니다. 예를 들어, 애플리케이션에서 특정 함수나 변수를 사용하지 않을 경우, Tree shaking은 해당 코드를 식별하고 제거하여 번들 크기를 최소화합니다. 이는 사용자가 앱을 더 빨리 다운로드하고 실행할 수 있도록 도와줍니다.
Code splitting
은 애플리케이션을 여러 개의 작은 번들로 분할하는 기술입니다. 이를 통해 초기 페이지 로드 시 필요한 최소한의 코드만 다운로드하여 애플리케이션의 초기 로딩 시간을 최소화할 수 있습니다. 예를 들어, 사용자가 특정 기능이나 라우트에 접근할 때 해당 부분에 필요한 코드만 다운로드하여 불필요한 코드를 제거하고 성능을 향상시킵니다. 이는 대규모 애플리케이션의 경우 특히 유용하며, 사용자 경험을 향상시키는 데 중요한 역할을 합니다.
요약
: Rollup과 Webpack은 모두 JavaScript 애플리케이션의 번들링 도구로 널리 사용되지만, 목표와 사용 사례에서 약간의 차이가 있습니다. Rollup은 주로 라이브러리나 패키지를 개발할 때 사용되며, Tree shaking과 간단한 설정이 주요 장점입니다. 반면에 Webpack은 웹 애플리케이션의 번들링 및 빌드에 사용되며, 다양한 기능과 유연성을 제공하여 복잡한 애플리케이션을 구성하는 데 적합합니다.
Rollup
: Rollup은 ES6 모듈 번들링을 위한 주로 JavaScript 라이브러리나 패키지를 빌드할 때 사용됩니다. Rollup은 간단하고 빠르며, Tree shaking을 효과적으로 지원하여 번들 크기를 최소화할 수 있습니다. 주로 라이브러리나 패키지를 개발할 때 사용되며, 불필요한 코드를 제거하여 최적화된 결과물을 생성합니다.
Webpack
: Webpack은 Rollup과 비슷하게 JavaScript 애플리케이션의 번들링을 수행하지만, 보다 다양한 기능을 제공합니다. Webpack은 모듈 번들링 뿐만 아니라 다양한 리소스(이미지, CSS 등)도 번들링할 수 있으며, 로더(loader)를 통해 다양한 전처리 작업을 수행할 수 있습니다. 또한 Code splitting, Hot Module Replacement(HMR) 등의 기능을 포함하여 더 많은 유연성과 확장성을 제공합니다. 주로 웹 애플리케이션의 번들링 및 빌드에 사용되며, 다양한 설정 옵션을 통해 원하는 대로 커스터마이징할 수 있습니다.