<style> .film__track { height: auto !important; } .film__stage { position: static !important; height: auto !important; /* Ohne diese Zeile ist der Rückfall LEER: container-type: size bemisst die Bühne nicht mehr nach ihrem Inhalt, und overflow: hidden schneidet alles weg. */ container-type: normal !important; } .film__poster { position: absolute !important; } .film__content [data-film-anchor] { position: static !important; transform: none !important; opacity: 1 !important; margin: 2.5rem clamp(1rem, 5vw, 4rem) !important; max-width: 34rem; } </style>

Angular Performance optimieren: 8 Techniken für schnellere Apps

Angular-Performance lässt sich mit acht gezielten Techniken deutlich verbessern: Lazy Loading, OnPush Change Detection, Signals, SSR/SSG-Rendering, Bildoptimierung, Critical CSS, Font-Preloading und Chunk-Analyse. Die häufigsten Performance-Probleme in Angular-Apps entstehen durch zu große initiale Bundles, unkontrollierte Change-Detection-Zyklen und fehlende Rendering-Strategie. Mit diesen Maßnahmen erreichen KMU-Websites messbar bessere Ladezeit und PageSpeed -Werte, ohne die Architektur komplett umzubauen.

Bundle-Größe reduzieren: Lazy Loading und Code-Splitting

Das initiale JavaScript-Bundle ist der größte einzelne Performance-Hebel in Angular-Anwendungen. Standardmäßig lädt Angular alle registrierten Komponenten beim ersten Seitenaufruf – auch wenn Nutzer 80% davon nie sehen. Lazy Loading via Code-Splitting löst dieses Problem strukturell.

  • loadComponent: Statt statischem Import wird loadComponent: () => import('./pages/contact/contact').then(m => m.ContactPage) verwendet. Angular splittet den Code automatisch in separate Chunks.
  • Standalone Components: Jede Komponente trägt ihre eigenen Abhängigkeiten – kein SharedModule, das alles in den initialen Bundle zieht. Direkte Importe ermöglichen präzises Tree-Shaking.
  • Chunk-Größen im Blick behalten: ng build --stats-json + webpack-bundle-analyzer zeigt, welche Chunks zu groß sind. Ziel: Initiales Bundle unter 200 KB gzipped.
  • Preloading-Strategie: PreloadAllModules oder Custom-Strategie sorgt dafür, dass Lazy Chunks im Hintergrund geladen werden, bevor der Nutzer navigiert.

Change Detection und OnPush-Strategie

Angulars Standard-Change-Detection prüft bei jedem Event den gesamten Komponentenbaum auf Änderungen. Bei großen Apps mit vielen Komponenten führt das zu hunderten unnötiger DOM-Checks pro Sekunde. OnPush reduziert das auf das notwendige Minimum.

  • ChangeDetectionStrategy.OnPush: Die Komponente wird nur neu gerendert, wenn sich eine Input-Referenz ändert, ein Signal-Wert aktualisiert oder ein async-Pipe einen neuen Wert emittiert.
  • Angular Signals (ab Angular 16): signal(), computed() und effect() ersetzen RxJS-BehaviorSubjects für lokalen Zustand. Signals triggern Change Detection präzise – nur betroffene Komponenten werden aktualisiert.
  • computed() für abgeleiteten Zustand: Statt eine Methode im Template aufzurufen, cached computed() das Ergebnis und aktualisiert nur bei Änderung der Quelldaten.
  • effect() im Constructor: Seiteneffekte in effect() im Constructor registrieren – niemals in ngOnInit, da effect() intern inject() nutzt.
  • Keine Funktionsaufrufe im Template: someMethod() im Template wird bei jeder Change Detection neu ausgeführt. Stattdessen computed() oder Getter mit Memoization verwenden.

SSR und SSG: Wann lohnt sich was für Angular-Apps?

Das Rendering -Modell entscheidet maßgeblich über Time to First Byte (TTFB), SEO-Indexierbarkeit und wahrgenommene Ladezeit. Angular Universal bietet drei Optionen, die sich je nach Anwendungsfall unterschiedlich eignen.

  • SSG (Static Site Generation) via ng build --prerender: Seiten werden zur Build-Zeit als statisches HTML gerendert. TTFB unter 50ms möglich. Ideal für alle Inhaltsseiten (Blog, Glossar, Stadtseiten).
  • SSR (Server-Side Rendering): Seiten werden per Request auf dem Server gerendert. Notwendig nur für wirklich dynamische Daten (eingeloggter Nutzerstatus, Echtzeit-Preise).
  • CSR (Client-Side Rendering): Nur für rein interaktive App-Bereiche hinter Login geeignet. Für öffentlich zugängliche Seiten aus SEO-Sicht zu vermeiden.
  • Hybrides Modell: app.routes.server.ts ermöglicht pro Route die Wahl zwischen prerender, server und client. Content-Seiten auf prerender, dynamische Dashboards auf server.
  • Hydration: Angular 17+ Universal Hydration verhindert Flash of Unstyled Content beim Übergang von SSR zu CSR. withEventReplay() in app.config.ts aktivieren.

Der Build-Prozess mit ng build --prerender erzeugt für jede vorgerenderte Route eine separate index.html – Apache liefert diese direkt aus, ohne Angular-Serverlogik. Für KMU-Websites mit 50–100 Seiten ist das die optimale Kombination aus SEO-Performance und geringem Server-Overhead.

Bilder und Assets optimieren

Bilder sind in den meisten Websites der größte Bandwidth-Verbrauch und häufigste Ursache für schlechte Largest Contentful Paint (LCP)-Werte. Richtiges Caching und optimiertes Asset-Delivery gehören zu den Maßnahmen mit dem besten Aufwand-Nutzen-Verhältnis.

  • WebP als Standard-Format: WebP ist 25-35% kleiner als JPEG bei gleicher visueller Qualität. Für alle nicht-transparenten Bilder WebP verwenden.
  • NgOptimizedImage (Angular 15+): Erzwingt width/height-Attribute, setzt automatisch loading='lazy' für Below-Fold-Bilder und unterstützt srcset für Responsive Images.
  • Above-Fold-Bilder vorausläden: Das Hero-Bild erhält priority-Attribut – Angular setzt fetchpriority='high' und ein <link rel='preload'>. Gilt nur für das tatsächlich sichtbare LCP-Element.
  • Lazy Loading für Below-Fold-Assets: Bilder unterhalb des Viewports loading='lazy'. Video-Embeds preload='none' – spart mehrere MB Bandwidth beim initialen Load.
  • {criticalCss} inlinen: Die für Above-Fold-Inhalte benötigten Styles direkt in den <head> inlinen. Verhindert render-blocking durch externe Stylesheet-Requests.
  • Font-Subsetting und Preload: Google Fonts self-hosten und auf benötigte Character-Sets subsetten. <link rel='preload' as='font'> für die primäre Schriftart im index.html.
  • HTTP-Caching-Header: Statische Assets (JS, CSS, Bilder) mit langen Cache-Zeiten und Content-Hash im Dateinamen ausliefern.
  • Unused CSS entfernen: Component-scoped SCSS verhindert globale Stylesheet-Aufblähung.

Kurz zusammengefasst

  • Bundle-Größe: loadComponent für alle Routen, Standalone Components, Ziel unter 200 KB gzipped initial.
  • Change Detection: OnPush auf allen Komponenten, Signals statt RxJS für lokalen Zustand, keine Funktionsaufrufe im Template.
  • Rendering-Strategie: SSG (ng build --prerender) für Inhaltsseiten, SSR nur für wirklich dynamische Daten.
  • Bilder: WebP, NgOptimizedImage mit priority für LCP-Element, lazy loading für alle Below-Fold-Assets.
  • Assets: Fonts self-hosten und preloaden, HTTP-Caching mit langen Laufzeiten, Critical CSS inlinen.
  • Monitoring: Lighthouse CI in Build-Pipeline integrieren, Core Web Vitals nach jedem Deployment prüfen.

Häufige Fragen

Wie mache ich eine Angular-App schneller?

Die acht wirksamsten Hebel: Lazy Loading, OnPush Change Detection, Signals, SSR/SSG, Bildoptimierung, Critical CSS, Font-Preloading und Chunk-Analyse. Der größte Einzelhebel ist meist die Reduktion des initialen Bundles per Lazy Loading.

Was bringt OnPush Change Detection?

OnPush weist Angular an, eine Komponente nur bei geänderten Eingaben oder Events neu zu prüfen, statt bei jedem Zyklus. In Kombination mit Signals reduziert das unnötige Re-Renders spürbar.

Lohnt sich SSR/SSG für Angular?

Ja – SSR/SSG liefert einen schnelleren First Paint und macht Inhalte für Suchmaschinen sofort sichtbar. Für Content-Seiten ist Prerender (SSG) ideal, für dynamische Bereiche SSR.

Warum sind Angular-Apps oft langsam?

Die häufigsten Ursachen sind zu große initiale Bundles, unkontrollierte Change-Detection-Zyklen und eine fehlende Rendering-Strategie. Alle drei lassen sich ohne kompletten Architektur-Umbau beheben.

Verbessert Bildoptimierung die Performance?

Ja, deutlich – Bilder sind häufig das größte LCP-Element. WebP-Format, korrekte Größen, Lazy Loading und NgOptimizedImage verbessern die Ladezeit und die Core Web Vitals direkt.

Unterstützung bei Struktur & Local SEO?

Wenn Sie Ihre Website sauber strukturieren und langfristig sichtbar aufbauen möchten, unterstütze ich Sie gerne.

Autor

Benjamin Tietz – Fullstack Developer & DevSecOps Engineer
Benjamin Tietz
Fullstack Developer & DevSecOps Engineer
KI-generiertes Bild

Fullstack Developer mit Fokus auf performante Websites, skalierbare Fullstack-Architekturen und nachhaltige SEO-Strategien. Spezialisiert auf Angular SSR/SSG und sichere Deployment-Prozesse.

Mehr über den Autor →
Projektanfrage