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 Get Page Load Time in Angular?
In web development, performance is the most important thing. Users expect fast and responsive web applications and even minor delays can impact user experience and satisfaction. Monitoring page load time is important for identifying performance bottlenecks and optimizing the user experience. In this
5 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 build progressive web app(PWA) in Angular 9 ?
In this article, we will develop a PWA (Progressive Web App) using Angular. What is PWA ? Progressive Web Apps (PWAs) are web applications that have been designed so that they are capable, reliable, and installable. PWA are built and enhanced with modern APIs to deliver enhanced capabilities, reliab
7 min read
How to reload or re-render the entire page using AngularJS?
While working with AngularJS we might come across a time when we want our user to switch contexts and re-render everything again.AngularJS provides a method by which we can re-render or even reload the entire page. So in this article, we will see how we can reload the route instead of just reloading
2 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 reuse template HTML block in Angular ?
Code Reusability is the capacity to repurpose pre-existing code when developing new software applications. It will allow you to store a piece of code that does a single task inside a defined block, and then call that code whenever you need it. In this article, we will learn How to reuse template HTM
2 min read
How to Get All Route Params/Data in Angular?
In Angular, managing route parameters and extracting data from routes is important for creating dynamic and responsive web applications. Route parameters allow you to pass information in URLs, and accessing this data enables your application to make decisions and render content dynamically. This art
4 min read
How to detect a route change in AngularJS ?
In this article, we will see how to detect a route change in AngularJS. In order to detect route change at any moment in AngularJS, this can be achieved by using the $on() method. The $on() method is an event handler, the event which will handle $routeChangeSuccess which gets triggered when route/vi
2 min read