Skip to content
⚠️ This article was written in 2019. Some content may be outdated.

Angularの遅延ロード:初期バンドルサイズの削減

Angularのルートベースの遅延ロードは、大規模アプリケーションの初期ロードパフォーマンスを最適化するための重要な手法です。

遅延ロードの設定

typescript
const routes: Routes = [
  {
    path: "admin",
    loadChildren: () =>
      import("./admin/admin.module").then((m) => m.AdminModule),
  },
  {
    path: "shop",
    loadChildren: () => import("./shop/shop.module").then((m) => m.ShopModule),
  },
];

プリロード戦略

typescript
@NgModule({
  imports: [
    RouterModule.forRoot(routes, {
      preloadingStrategy: PreloadAllModules  // アイドル時にプリロード
    })
  ]
})

カスタム戦略:preload: trueがマークされたモジュールのみプリロード:

typescript
@Injectable({ providedIn: "root" })
export class SelectivePreloadingStrategy implements PreloadingStrategy {
  preload(route: Route, load: () => Observable<any>): Observable<any> {
    return route.data?.["preload"] ? load() : of(null);
  }
}

効果

適切なコード分割を行うと、初期バンドルサイズを40%〜60%削減できます。サーバーサイドのHTTP/2プッシュと組み合わせると、さらに効果的です。

MIT Licensed