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

Improving Start-up Performance with Lazy Loading in Angular 2

Improving Start-up Performance with Lazy Loading in Angular 2

Slides from talk at ngbe in Belgium, 2016

Manfred Steyer

December 09, 2016
Tweet

More Decks by Manfred Steyer

Other Decks in Programming

Transcript

  1. About me … • Manfred Steyer • SOFTWAREarchitekt.at • Trainer

    & Consultant • Focus: Angular • Google Developer Expert (GDE) Page  2 Manfred Steyer
  2. Contents • Lazy Loading • Prevent Lazy Loading • Preloading

    • Shared Modules and Lazy Loading Page  3
  3. Module Structure Page  5 AppModule … … … SharedModule

    Root Module Feature Modules Shared Module
  4. Lazy Loading Page  6 AppModule … … … SharedModule

    Root Module Feature Modules Shared Module
  5. Root Module with Lazy Loading Page  7 const APP_ROUTE_CONFIG:

    Routes = [ { path: 'home', component: HomeComponent }, { path: 'flights', loadChildren: './[…]flight-booking.module#FlightBookingModule' } ];
  6. Routes for Feature Module Page  8 const FLIGHT_ROUTES =

    [ { path: '/bookings', component: FlightBookingComponent, […] }, […] } Url: /flights/bookings Triggers Lazy Loading
  7. Sample @Injectable() export class AuthLoadGuard implements CanLoad { canLoad(route: Route):

    Observale<boolean> | Promise<boolean> | boolean { return true; } }
  8. Configure a Guard let APP_ROUTES: Routes = [ { path:

    'flight-booking', loadChildren: ‚[…]', canLoad: [AuthLoadGuard] }, […] } Just a Token // Your Module providers: [ { provide: AuthLoadGuard, useClass: AuthLoadGuard} ],
  9. Idea • Modules that might be needed later are loaded

    after (!) the start of the application • When the module is actually needed later, it is available immediately Page  19
  10. Lazy Loading and Shared Modules Page  24 AppModule FlightModule

    SharedModule includes includes (lazy) includes AuthService
  11. Lazy Loading and Shared Modules Page  25 AppModule FlightModule

    SharedModule includes includes (lazy) includes AuthService AuthService
  12. Lazy Loading and Shared Modules Page  26 AppModule FlightModule

    SharedModule includes includes (lazy) includes AuthService AuthService
  13. Solution Page  27 AppModule FlightModule SharedModule includes (with Providers)

    includes (lazy) includes (without Providers) AuthService
  14. Shared Module Page  29 @NgModule({ […], providers: [] })

    export class SharedModule { static forRoot(): ModuleWithProviders { return { ngModule: SharedModule, providers: [AuthService, […]] } } }
  15. Summary Page  31 Lazy Loading of Modules webpack splits

    bundle Prevent Lazy Loading with Guards Preloading Strategy Shared Modules w/ and w/o Providers Lots of lazy animals on the web ;-)