Benutzer:Josefgattermayer/Tree Shaking (3.Versuch)
In der Informatik ist das Tree Shaking (Baumschütteln zu Deutsch) eine Technik zur Eliminierung von totem Code, die bei der Optimierung von Code angewendet wird, der in ECMAScript-Dialekten wie Dart, JavaScript oder TypeScript in einem einzigen Paket geschrieben ist, das von einem Webbrowser geladen wird. Anstatt toten Code, der niemals ausgeführt werden kann, zu eliminieren, beginnt das Tree Shaking am Einstiegspunkt und umfasst nur den Code, dessen Ausführung garantiert ist. Es wird kurz und bündig als „Live-Code-Einschluss“ beschrieben [1].
Geschichte
BearbeitenDie Eliminierung von totem Code in dynamischen Sprachen ist ein viel schwierigeres Problem als in statischen Sprachen. Die Idee eines „Tree Shakers“ entstand in den 1990er Jahren in LISP. Die Idee ist, dass alle ausführbaren Abläufe eines Programms als ein Baum von Funktionsaufrufen dargestellt werden können, so dass Funktionen, die nie aufgerufen werden, eliminiert werden können.
Der Algorithmus wurde auf JavaScript in den Google Closure Tools und dann auf Dart im ebenfalls von Google geschriebenen dart2js-Compiler angewendet, der 2012 von Bob Nystrom vorgestellt und 2013 im Buch „Dart in Action“ des Autors Chris Buckett beschrieben wurde:
Wenn Code von Dart in JavaScript konvertiert wird, führt der Compiler ein „Tree Shaking“ durch. In JavaScript müssen Sie eine ganze Bibliothek hinzufügen, auch wenn Sie diese nur für eine Funktion benötigen, aber Dank des Tree-Shakings enthält das von Darts abgeleitete JavaScript nur die einzelnen Funktionen, die Sie aus einer Bibliothek benötigen.
— Chris Buckett
Die nächste Welle der Popularität des Begriffs wird dem 2015 entwickelten Rollup-Projekt von Rich Harris zugeschrieben.
Bezug zu ECMAScript 6-Modulen
BearbeitenDie Beliebtheit des Tree Shakings in JavaScript beruht auf der Tatsache, dass im Unterschied zu CommonJS-Modulen das Laden von ECMAScript 6-Modulen statisch erfolgt und somit der gesamte Abhängigkeitsbaum durch statisches Parsen des Syntaxbaums abgeleitet werden kann. Somit wird das Tree Shaking zu einem einfachen Problem. Das Tree Shaking greift jedoch nicht nur auf der Import-/Exportebene, sondern kann je nach Implementierung auch auf der Anweisungsebene funktionieren.