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

Hochperformante Anwendungen mit Angular

Hochperformante Anwendungen mit Angular

Presentation von dotnet cologne, Köln, Mai 2017

Manfred Steyer

May 05, 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 • Überblick • 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 ▪ 14
  8. Mehr zu Lazy Loading auf SOFTWAREarchitekt.at • 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
  9. OnPush flights flight flight {{ flight.id }} {{ flight.id }}

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

    }} FlightSearch Card Card flightold === flightnew
  11. 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
  12. Mehr zu OnPush auf Heise.de • Steyer: Tipps und Tricks

    mit Angular, Teil 9: Performance-Tuning, https://goo.gl/O59xc4
  13. Ansätze für das Kompilieren • JIT: Just in Time, zur

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

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

    Optionen • ng build --prod • @ngtools/webpack mit AotPlugin • Auch ohne CLI nutzbar
  16. Mehr zu AOT auf SOFTWAREarchitekt.at • 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
  17. 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)
  18. 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.
  19. Fallback für Safari & Co. • AppCache • Weniger Feature

    • Keine große Auswahl an Caching Patterns • Cache only • Network only
  20. 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
  21. Fazit Quick Wins Lazy Loading und Preloading AOT und Tree

    Shaking Caching mit Service Worker OnPush mit Immutables und Observables Consumer-Apps: Serverside Rendering