Дерево трясется - Tree shaking

В вычисление, дерево трясется это устранение мертвого кода техника, применяемая при оптимизации кода, написанного на ECMAScript диалекты как Дротик, JavaScript, или же Машинопись в один пакет, который загружается веб-браузер. Часто в отличие от традиционных методов устранения мертвого кода с одной библиотекой, общих для минификаторов, встряхивание дерева устраняет неиспользуемые функции из всего пакета, начиная с точки входа и включая только те функции, которые могут быть выполнены [1][2]. Это кратко описывается как «включение живого кода».

История

Устранение мертвого кода в динамических языках - гораздо более сложная проблема, чем в статических языках. Идея «treehaker» зародилась в LISP[3] в 1990-е гг. Идея состоит в том, что все возможные потоки выполнения программы могут быть представлены в виде дерева вызовов функций, так что функции, которые никогда не вызываются, могут быть исключены.

Алгоритм был применен к JavaScript в Инструменты закрытия Google а затем в Дротик в компиляторе dart2js также написан Google, представленный Бобом Нистромом в 2012 году[4][2] и описан в книге Криса Баккета «Дротик в действии» в 2013 году:

Когда код конвертируется из Dart в JavaScript, компилятор «встряхивает дерево». В JavaScript вы должны добавить всю библиотеку, даже если она вам нужна только для одной функции, но благодаря встряхиванию дерева, полученный из Dart JavaScript включает только отдельные функции, которые вам нужны из библиотеки.

— Крис Баккет

Следующая волна популярности этого термина связана с проектом Рича Харриса Rollup.[5] разработан в 2015 году.

Отношение к модулям ECMAScript 6

Популярность встряхивания дерева в JavaScript основана на том факте, что, в отличие от модулей CommonJS, загрузка модуля ECMAScript 6 является статической, и, таким образом, все дерево зависимостей может быть выведено путем статического анализа синтаксического дерева. Таким образом, встряхивание дерева становится легкой проблемой. Однако встряхивание дерева применяется не только на уровне импорта / экспорта: оно также может работать на уровне операторов, в зависимости от реализации.[нужна цитата ]

Рекомендации

  1. ^ Харрис, Рич. "Встряхивание деревьев против устранения мертвого кода". Получено 16 сентября 2020.
  2. ^ а б Лэдд, Сет. Блог Сета Лэдда http://blog.sethladd.com/2013/01/minification-is-not-enough-you-need.html. Отсутствует или пусто | название = (помощь)
  3. ^ comp.lang.lisp Что такое treehaker?
  4. ^ Может ли Google Dart решить проблемы скорости и масштабирования JavaScript?
  5. ^ Как очистить вашу сборку JavaScript с помощью Tree Shaking