How to pick which Angular Bundle to Preload ?
Last Updated :
23 Dec, 2020
Loading strategy in angular decides how to load the app modules when the application runs into the browser. In Angular, we have three types of loading: Eager loading, lazy loading, and preloading. By default, Angular follows eager loading i.e. as soon as the application starts downloading in the browser, the modules start to load within the browser. You can also set some modules to be lazy-loaded i.e. the modules will not start loading until they are explicitly called.
Besides these two loading strategies, we have 3rd type of loading i.e. preloading strategy. Before determining which module to preload, let's first understand what is preloading in angular.
In preloading, we explicitly tell Angular compiler which lazy loaded modules that we want to prerender first i.e. In preloading we define some modules to be preloaded as soon as the main modules finish loading to avoid the delay of the rendering of lazy loaded modules for better user experience.
There are various scenarios on which we decided which modules should be preloaded.
- If the module size is too big, we generally decided to load such modules to preload because when the user calls such modules, they are either complete loading or complete partial loading so that the user doesn't have to wait.
- The modules which are frequently used in the application are also set to be preload to avoid the delay time.
So, these are some important conditions over which you can decide which lazy loaded modules should be loaded as preload.
Now, let's understand how to implement preloading in the angular application.
There are two ways to do so first we can preload all the lazy loaded modules and second, we can define specific lazy modules to preload.
- All lazy modules to load as preload (preloadingStrategy : PreloadAllModules):
AppRoute.ts:
JavaScript
import { NgModule } from '@angular/core';
import { Routes, RouterModule, PreloadAllModules }
from '@angular/router';
const routes: Routes = [
{
path: 'user',
loadChildren: () => import('./user/user.module')
.then(m => m.UserModule)
},
{
path: 'orders',
loadChildren: () => import('./orders/orders.module')
.then(m => m.OrdersModule)
},
{
path: '',
redirectTo: '',
pathMatch: 'full'
}
];
@NgModule({
imports: [
RouterModule.forRoot(routes,
{ prelaodingStrategy: PreloadAllModules })
],
exports: [RouterModule],
providers: []
})
export class AppRoutingModule { }
export class AppRoutingModule { }
UserComponent.ts:
JavaScript
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-user',
templateUrl: './user.component.html',
styleUrls: ['./user.component.css']
})
export class UserComponent implements OnInit, OnDestroy {
constructor() { }
ngOnInit() {
Console.log("Loading started......");
}
ngOnDestroy() {
}
}
OrderComponent.ts:
JavaScript
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-order',
templateUrl: './order.component.html',
styleUrls: ['./order.component.css']
})
export class OrderComponent implements OnInit {
constructor() { }
ngOnInit() {
Console.log("Order Loading started......");
}
}
Output: When you go to the network tab under the developer options, you will see that as soon as your bootstrap component gets loaded, all other modules both user and order also start loading, this is preloading of all the modules.
As you can see both orders and users module start loading
Specific lazy module to load as preload (data : {preload: true}):
AppRoute.ts:
JavaScript
import { NgModule } from '@angular/core';
import { Routes, RouterModule, PreloadAllModules }
from '@angular/router';
const routes: Routes = [
{
path: 'user',
loadChildren: () => import('./user/user.module')
.then(m => m.UserModule),
data: { preload: true }
},
{
path: 'orders',
loadChildren: () => import('./orders/orders.module')
.then(m => m.OrdersModule)
},
{
path: '',
redirectTo: '',
pathMatch: 'full'
}
];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [RouterModule],
providers: []
})
export class AppRoutingModule { }
UserComponent.ts:
JavaScript
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-user',
templateUrl: './user.component.html',
styleUrls: ['./user.component.css']
})
export class UserComponent implements OnInit, OnDestroy {
constructor() { }
ngOnInit() {
Console.log("Loading started......");
}
ngOnDestroy() {
}
}
OrderComponent.ts:
JavaScript
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-order',
templateUrl: './order.component.html',
styleUrls: ['./order.component.css']
})
export class OrderComponent implements OnInit {
constructor() { }
ngOnInit() {
Console.log("order Loading started......");
}
}
Output: In the above example, we have set preload true for only the user component among all other lazy loaded components. Now if you go to network tab under developer option or in the below screenshot, you will see after bootstrap component gets loaded, only the user component starts loading but order Component doesn't start loading until we go to that component explicitly. So, this is the preloading of custom component.
As you can see only the user module starts loading, the order module doesn't.
So, in this way, we can load some or all of the lazy modules as preload.
Similar Reads
How to preload all Angular Bundles ? Introduction to pre-loading: The introduction of the Lazy Loading feature in Angular greatly improved the performance of the application. Lazy loading helps keep initial bundle sizes smaller, which in turn helps decrease load times. But, the main problem with lazy loading was that when the user navi
3 min read
How to bundle an Angular app for production? Introduction Before deploying the web app, Angular provides a way to check the behavior of the web application with the help of a few CLI commands. Usually, the ng serves command is used to build, watch, and serve the application from local memory. But for deployment, the behavior of the application
4 min read
How to create module with Routing in Angular 9 ? Angular applications are modular, and NgModules is Angular's own modular architecture. NgModules are containers for closely integrated application domains, workflows, or feature sets that comprise cohesive code blocks. Their scope is governed by the NgModule they include, and they can contain compon
4 min read
How to Enable HTML 5 Mode in Angular 1.x ? HTML5 mode in Angular1.x is the configuration that replaces the default hash-based URLs and provides more user-friendly URLs using the HTML5 History API. This feature mainly enhances our one-page application and also provides a better experience to the users. We need to configure our server with pro
6 min read
How To Disable And Enabling Production Mode In Angular? In Angular, running an application in production mode is important for optimizing performance and minimizing bundle sizes. Understanding how to switch between production and development modes is essential for Angular developers. This article will explain how to enable and disable production mode in
5 min read
How to Use Vite with Angular? Vite is a modern build tool that dramatically enhances the development experience of front-end systems. Originally developed for Vue.js, Vite has gained a reputation for speed and performance. This article will explore how to integrate Vite and Angular using Viteâs fast development server and effect
2 min read