Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Durch die Schallmauer: Hochperformante Anwendungen mit Angular

Durch die Schallmauer: Hochperformante Anwendungen mit Angular

Slides from my talk at JAX 2017 in Mainz, Germany.

Manfred Steyer

May 10, 2017
Tweet

More Decks by Manfred Steyer

Other Decks in Programming

Transcript

  1. Über mich … • Manfred Steyer • SOFTWAREarchitekt.at • Trainer

    & Consultant • Focus: Angular • Google Developer Expert (GDE) Page ▪ 2 Manfred Steyer
  2. Inhalt • Lazy Loading und Preloading • Datenbindungsperformance und OnPush

    • AOT und Tree Shaking • Caching mit Service Worker • Serverside Rendering
  3. Module Struktur Page ▪ 8 AppModule … … … SharedModule

    Root Module Feature Modules Shared Module
  4. Lazy Loading Page ▪ 9 AppModule … … … SharedModule

    Root Module Feature Modules Shared Module
  5. Root Module mit Lazy Loading Page ▪ 10 const APP_ROUTE_CONFIG:

    Routes = [ { path: 'home', component: HomeComponent }, { path: 'flights', loadChildren: './[…]flight-booking.module#FlightBookingModule' } ];
  6. Routen für Feature Module Page ▪ 11 const FLIGHT_ROUTES =

    [ { path: '', component: FlightBookingComponent, […] }, […] }
  7. Idee • Module, die später eventuell benötigt werden, nach Anwendungsstart

    vorladen • Wenn Modul benötigt wird, steht es augenblicklich zur Verfügung Page ▪ 15
  8. OnPush flights flight flight {{ flight.id }} {{ flight.id }}

    FlightSearch Card Card Nur geprüft nach “Benachrichtigung”
  9. Inputs ändern flights flight flight {{ flight.id }} {{ flight.id

    }} FlightSearch Card Card flightold === flightnew
  10. Nicht „alles oder nichts“ • Immutables und Observables müssen nicht

    durchgängig genutzt werden • Nutzung kann sich auf ausgewählte Teile beschränken • Vollständige Nutzung: Redux • @ngrx/store
  11. Ansätze für das Kompilieren • JIT: Just in Time, zur

    Laufzeit • AOT: Ahead of Time, während des Builds
  12. Vorteile von AOT • Bessere Startup-Performance • Kleine Bundles: Compiler

    muss nicht ausgeliefert werden • Analysierbarkeit des Codes • Nicht verwendete Frameworkbestandteile abstoßen • Tree Shaking
  13. Angular CLI • Commandline Interface für Scaffolding • cli.angular.io •

    Optionen • ng build --prod • @ngtools/webpack mit AotPlugin • Auch ohne CLI nutzbar
  14. Was sind Service Worker? • Hintergrund-Tasks • Werden von Web

    App installiert • Können sich deaktivieren und bei Ereignissen wieder aktivieren • Nur HTTPS (außer localhost)
  15. Service Worker und Caching/ Offline • Anfragen abfangen • Entscheiden,

    wie auf Anfragen zu antworten ist • Same Origin Policy • Caching Muster • Cache only • Network only • Try cache first, then network • Try network first, then cache • etc.
  16. Fallback für Safari & Co. • AppCache • Weniger Feature

    • Keine große Auswahl an Caching Patterns • Cache only • Network only
  17. SSR und Angular • Ursprünglich Community-Projekt • Angular Universal •

    https://github.com/angular/universal • Ab Angular 4: Im Core [Refactoring!] • Vorrendern mit NodeJS • ASP.NET: Angular Services
  18. Fazit Quick Wins Lazy Loading und Preloading AOT und Tree

    Shaking Caching mit Service Worker OnPush mit Immutables und Observables Consumer-Apps: Serverside Rendering
  19. Mehr auf SOFTWAREarchitekt.at & Co. • Lazy Loading von Modulen

    mit Angular 2, dem neuen Router und Webpack, https://goo.gl/rvsCjM • Performanceoptimierung mit Preloading und dem neuen Angular Router, https://goo.gl/LkXZ7e • 5 Things You Wouldn't Necessarily Expect When Using AOT And Tree Shaking In Angular, https://goo.gl/FwuzrR • Angular 2 AOT Compilation And Tree Shaking With Webpack2 And/Or Rollup: Step By Step, https://goo.gl/99zrnG • Server Side Rendering With Angular 4, https://goo.gl/SdRtVT • Steyer: Tipps und Tricks mit Angular, Teil 9: Performance-Tuning, https://goo.gl/O59xc4