Дерево трясется
В вычислительной технике « тряска дерева» — это метод устранения мертвого кода , который применяется при оптимизации кода. [1] Часто в отличие от традиционных методов устранения мертвого кода одной библиотеки, обычных для минификаторов, встряхивание дерева удаляет неиспользуемые функции из всего пакета, начиная с точки входа и включая только те функции, которые могут быть выполнены. [2] [3] Это кратко описывается как «включение живого кода».
История
[ редактировать ]Устранение мертвого кода в динамических языках — гораздо более сложная проблема, чем в статических языках. Идея «деревошейкера» зародилась в LISP. [4] в 1990-е годы. Идея состоит в том, что все возможные потоки выполнения программы можно представить в виде дерева вызовов функций, чтобы можно было исключить функции, которые никогда не вызываются.
Алгоритм был применен к JavaScript в Google Closure Tools , а затем к Dart в компиляторе dart2js, также написанном Google , представленном Бобом Нистромом в 2012 году. [5] [3] и описано в книге «Дротик в действии» автора Криса Бакетта в 2013 году:
Когда код преобразуется из Dart в JavaScript, компилятор выполняет «тряску дерева». В JavaScript вам нужно добавить целую библиотеку, даже если она вам нужна только для одной функции, но благодаря встряхиванию дерева JavaScript, основанный на Dart, включает только отдельные функции, которые вам нужны из библиотеки.
— Крис Бакетт
Следующая волна популярности этого термина связана с проектом Рича Харриса Rollup. [6] разработан в 2015 году.
Связь с модулями ECMAScript 6
[ редактировать ]Популярность встряхивания деревьев в JavaScript основана на том факте, что в отличие от модулей CommonJS загрузка модулей ECMAScript 6 является статической, и, таким образом, все дерево зависимостей можно вывести путем статического анализа синтаксического дерева. Таким образом, тряска дерева становится легкой проблемой. Однако встряхивание дерева применяется не только на уровне импорта/экспорта: оно также может работать и на уровне операторов, в зависимости от реализации. [ нужна ссылка ]
Ссылки
[ редактировать ]- ^ «Уменьшение полезной нагрузки JavaScript с помощью Tree Shaking» .
- ^ Харрис, Рич. «Встряхивание дерева или устранение мертвого кода» . Проверено 16 сентября 2020 г.
- ^ Перейти обратно: а б Лэдд, Сет. «Минификации недостаточно, нужно встряхнуть дерево» . Блог Сета Лэдда .
- ^ comp.lang.lisp Что такое древесина?
- ^ Может ли Google Dart решить проблемы скорости и масштабирования JavaScript?
- ^ Как очистить сборку JavaScript с помощью Tree Shaking