stringtranslate.com

Sacudiendo el árbol

En informática , la sacudida de árboles es una técnica de eliminación de código muerto que se aplica al optimizar el código. [1] A menudo contrastada con las técnicas tradicionales de eliminación de código muerto de una sola biblioteca comunes a los minificadores, la sacudida de árboles elimina funciones no utilizadas de todo el paquete comenzando en el punto de entrada y solo incluyendo funciones que se pueden ejecutar. [2] [3] Se describe sucintamente como "inclusión de código vivo".

Historia

La eliminación de código muerto en lenguajes dinámicos es un problema mucho más difícil que en lenguajes estáticos. La idea de un "treeshaker" se originó en LISP [4] en la década de 1990. La idea es que todos los flujos de ejecución posibles de un programa se pueden representar como un árbol de llamadas de funciones, de modo que las funciones que nunca se llaman se puedan eliminar.

El algoritmo se aplicó a JavaScript en Google Closure Tools y luego a Dart en el compilador dart2js también escrito por Google , presentado por Bob Nystrom en 2012 [5] [3] y descrito por el libro Dart in Action del autor Chris Buckett en 2013:

Cuando el código se convierte de Dart a JavaScript, el compilador realiza un "tree shaker". En JavaScript, hay que añadir una biblioteca completa aunque solo la necesites para una función, pero gracias al tree shaker, el JavaScript derivado de Dart solo incluye las funciones individuales que necesitas de una biblioteca.

—Chris  Buckett

La siguiente ola de popularidad del término se atribuye al proyecto Rollup de Rich Harris [6] desarrollado en 2015.

Relación con los módulos de ECMAScript 6

La popularidad del tree shake en JavaScript se basa en el hecho de que, a diferencia de los módulos CommonJS, la carga de módulos ECMAScript 6 es estática y, por lo tanto, todo el árbol de dependencias se puede deducir mediante el análisis estático del árbol de sintaxis. Por lo tanto, el tree shake se convierte en un problema fácil. Sin embargo, el tree shake no solo se aplica en el nivel de importación/exportación: también puede funcionar en el nivel de declaración, según la implementación. [ cita requerida ]

Referencias

  1. ^ "Reducir las cargas útiles de JavaScript con Tree Shaking".
  2. ^ Harris, Rich. "Tree-shaking versus dead code removal" (Agitar árboles versus eliminar código muerto) . Consultado el 16 de septiembre de 2020 .
  3. ^ ab Ladd, Seth. "La minimización no es suficiente, es necesario sacudir los árboles". Blog de Seth Ladd .
  4. ^ comp.lang.lisp ¿Qué es un treeshaker?
  5. ^ ¿ Puede Google Dart resolver los problemas de velocidad y escala de JavaScript?
  6. ^ Cómo limpiar su compilación de JavaScript con Tree Shaking