나무 흔들림

Tree shaking

컴퓨팅에서 트리 쉐이크는 코드[1]최적화할 때 적용되는 데드 코드 제거 기술입니다.종종 미니어에 공통적인 기존의 단일 라이브러리 데드 코드 제거 기법과 대조되는 트리 쉐이킹은 엔트리 포인트에서 시작하여 실행할 [2][3]수 있는 기능만 포함시킴으로써 번들 전체에서 사용되지 않는 기능을 제거합니다.이것은 「실시간 코드 포함」이라고 간결하게 기술되어 있습니다.

역사

동적 언어의 데드 코드 제거는 정적 언어보다 훨씬 더 어려운 문제입니다."트리셰이커"의 개념은 1990년대 LISP에서[4] 비롯되었습니다.프로그램의 가능한 모든 실행 흐름을 함수 호출의 트리로 나타낼 수 있기 때문에 호출되지 않는 함수를 제거할 수 있습니다.

이 알고리즘은 Google Closure ToolsJavaScript와 Google이 작성한 dart2js 컴파일러의 Dart에 적용되었으며, 2012년에[5][3] Bob Nystrom에 의해 제시되었으며 2013년에 저자인 Chris Buckett의 Dart in Action에 의해 설명되었다.

코드가 Dart에서 JavaScript로 변환되면 컴파일러는 '트리 흔들림'을 수행합니다.JavaScript에서는 하나의 기능에만 필요한 라이브러리 전체를 추가해야 하지만 Dart에서 파생된 JavaScript는 라이브러리에서 필요한 개별 기능만 포함합니다.

--

이 용어의 다음 인기 물결은 2015년에 개발된 Rich Harris의 Rollup 프로젝트[6] 덕분입니다.

ECMAScript 6 모듈과의 관계

JavaScript에서 트리 쉐이킹의 인기는 Common과 대조적으로JS 모듈, ECMAScript 6 모듈의 로딩은 스태틱하므로 의존관계 트리 전체를 스태틱하게 해석함으로써 추론할 수 있습니다.따라서 나무 흔들림은 쉬운 문제가 된다.단, 트리 흔들기는 Import/export 수준에만 적용되는 것이 아닙니다.[citation needed]실장에 따라서는 스테이트먼트 수준에서도 동작할 수 있습니다.

레퍼런스

  1. ^ "Reduce JavaScript Payloads with Tree Shaking".
  2. ^ Harris, Rich. "Tree-shaking versus dead code elimination". Retrieved 16 September 2020.
  3. ^ a b Ladd, Seth. "Minification is not enough, you need tree shaking". Seth Ladd's Blog.
  4. ^ comp.lang.lisp 트리쉐이커가 뭐죠?
  5. ^ Google Dart가 JavaScript의 속도와 스케일 문제를 해결할 수 있을까요?
  6. ^ 트리의 흔들림으로 JavaScript 빌드를 정리하는 방법