Bundling
Definition: Bundling bezeichnet den Prozess des Zusammenfassens mehrerer JavaScript-, CSS- oder anderer Web-Ressourcen-Dateien in eine oder wenige optimierte Ausgabedateien (Bundles). Bundler analysieren die Import-Abhängigkeitsstruktur des Codes, entfernen ungenutzten Code (Tree Shaking), minimieren die Ausgabe (Minification) und können das Bundle in dynamisch nachladbare Teile aufteilen (Code Splitting). Gängige Bundler: Webpack, Vite, Rollup, esbuild, Parcel. Bundling ist Bestandteil des Build-Prozesses jeder modernen Web-Applikation und beeinflusst direkt die initiale Ladezeit und Core Web Vitals.
Erläuterung
Mit HTTP/1.1 war Bundling kritisch: Jede HTTP-Anfrage hatte signifikanten Overhead durch Verbindungsaufbau. Mit HTTP/2 und HTTP/3 (Multiplexing) ist dieser Overhead kleiner – Bundling bleibt aber wichtig wegen Tree Shaking, Minification und Code Splitting, nicht nur wegen Request-Reduktion. Das richtige Bundling-Setup beeinflusst Initial Load Time und damit FCP, LCP und INP.
Bundler-Tools im Vergleich
- Vite: Moderner Bundler (Evan You, 2020); nutzt esbuild für schnelle Entwicklungs-Server und Rollup für Produktions-Builds; sehr schnelle HMR (Hot Module Replacement); Standard in Vue 3 und zunehmend in React-Projekten; optimale Wahl für neue Projekte 2024–2025
- Webpack: Marktführer seit ~2015; sehr flexibel durch Plugin-System; komplexe Konfiguration; Webpack 5 mit Module Federation für Micro-Frontends; nach wie vor Standard in vielen Enterprise-Projekten; Create React App nutzt Webpack (nun weitgehend durch Vite ersetzt)
- esbuild: Go-basierter Bundler; 10–100× schneller als Webpack; weniger Features aber sehr schnelles Build; Basis für Vite-Entwicklungs-Server; geeignet für einfache Setups und als Build-Tool-Kern
- Rollup: Spezialisiert auf Bibliotheks-Build; produziert saubere ES-Module-Ausgabe; Tree Shaking-Pionier; geeignet für npm-Packages und Bibliotheken; Vite nutzt Rollup für Produktions-Builds
- Parcel: Zero-Config-Bundler; automatische Konfiguration ohne Setup-Aufwand; geeignet für kleinere Projekte; weniger Kontrolle als Webpack oder Vite
Tree Shaking
- Funktionsweise: Bundler analysiert statische Import/Export-Struktur (ES Modules); entfernt Code der nie importiert oder ausgeführt wird («dead code»); Voraussetzung: ES Modules (import/export) statt CommonJS (require); kann Bundle-Größe um 30–70 % reduzieren bei großen Bibliotheken
- Praxisbeispiel: Import von lodash: import _ from 'lodash' lädt gesamte Bibliothek (~70 KB); import { debounce } from 'lodash-es' mit Tree Shaking lädt nur debounce-Funktion (~2 KB); Bibliotheken müssen ES-Module-kompatibel sein (lodash-es statt lodash)
- Side Effects: Tree Shaking funktioniert nur wenn Bundler weiß ob Module Side Effects haben; «sideEffects: false» in package.json signalisiert Tree-Shaking-Sicherheit; CSS-Imports sind typisch Side Effects und brauchen explizite Ausnahmen
Code Splitting und Chunk-Strategien
- Route-basiertes Code Splitting: Jede Seite/Route wird als separater Chunk gebundelt; wird erst geladen wenn Nutzer die Route besucht; reduziert Initial-Bundle-Größe erheblich; Standard in React Router, Next.js, Vue Router; dynamic import() für lazy loading
- Vendor-Chunk-Splitting: Third-Party-Abhängigkeiten (node_modules) in separaten Chunk; lang cachebar weil sie sich selten ändern; App-Code-Bundle klein und häufig aktualisiert; Cache-Strategien für verschiedene Chunks optimieren
- Gemeinsame Chunks: Code der von mehreren Routen geteilt wird in Shared-Chunk auslagern; verhindert Code-Duplizierung über mehrere Route-Bundles; Webpack: splitChunksPlugin; Vite: automatisch über Rollup-Konfiguration
Performance-Impact
- Bundle-Größe und LCP: Großes JavaScript-Bundle blockiert Main Thread; Parser-Blocking-Scripts verzögern FCP und LCP; Ziel: Initial JS-Bundle unter 200 KB (komprimiert); Lighthouse zeigt «Reduce unused JavaScript» und «Avoid large network payloads»
- Analyse-Tools: webpack-bundle-analyzer: visuelle Treemap des Bundle-Inhalts; source-map-explorer: analysiert minified Bundle via Source Map; bundlewatch: CI-Integration für Bundle-Größen-Budgets; Lighthouse Network-Tab: detaillierte Größenanalyse