La càrrega mandrosa (lazy loading) és una tècnica d'optimització que permet carregar mòduls només quan són necessaris, en lloc de carregar-los tots al començament. Això pot millorar significativament el rendiment de l'aplicació, especialment en aplicacions grans amb molts mòduls.
Conceptes Clau
- Càrrega mandrosa: Carregar mòduls només quan es necessiten.
- Rutes: Definir rutes per als mòduls que es carregaran mandrosament.
- Mòduls: Dividir l'aplicació en mòduls més petits i independents.
Avantatges de la Càrrega Mandrosa
- Millora del Rendiment: Redueix el temps de càrrega inicial de l'aplicació.
- Optimització de Recursos: Només es carreguen els recursos necessaris en el moment adequat.
- Escalabilitat: Facilita la gestió i manteniment de l'aplicació dividint-la en mòduls més petits.
Configuració de la Càrrega Mandrosa
Pas 1: Crear un Mòdul
Primer, crearem un mòdul que volem carregar mandrosament. Suposem que tenim un mòdul anomenat AdminModule
.
Aquest comandament crea un mòdul AdminModule
i configura la ruta per carregar-lo mandrosament.
Pas 2: Configurar les Rutes
En el fitxer app-routing.module.ts
, veurem una configuració similar a aquesta:
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: 'admin', loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }
Pas 3: Definir les Rutes del Mòdul
En el fitxer admin-routing.module.ts
, definirem les rutes específiques per al mòdul AdminModule
.
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { AdminComponent } from './admin.component'; const routes: Routes = [ { path: '', component: AdminComponent } ]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] }) export class AdminRoutingModule { }
Pas 4: Crear el Component
Crearem un component per al mòdul AdminModule
.
Pas 5: Importar el Mòdul de Rutes
En el fitxer admin.module.ts
, importarem el mòdul de rutes.
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { AdminRoutingModule } from './admin-routing.module'; import { AdminComponent } from './admin.component'; @NgModule({ declarations: [AdminComponent], imports: [ CommonModule, AdminRoutingModule ] }) export class AdminModule { }
Exemple Complet
app-routing.module.ts
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: 'admin', loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }
admin-routing.module.ts
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { AdminComponent } from './admin.component'; const routes: Routes = [ { path: '', component: AdminComponent } ]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] }) export class AdminRoutingModule { }
admin.module.ts
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { AdminRoutingModule } from './admin-routing.module'; import { AdminComponent } from './admin.component'; @NgModule({ declarations: [AdminComponent], imports: [ CommonModule, AdminRoutingModule ] }) export class AdminModule { }
admin.component.ts
import { Component } from '@angular/core'; @Component({ selector: 'app-admin', template: `<h1>Admin Works!</h1>`, styles: [] }) export class AdminComponent { }
Exercici Pràctic
- Crea un nou mòdul anomenat
UserModule
que es carregui mandrosament. - Defineix una ruta per al mòdul
UserModule
. - Crea un component dins del
UserModule
anomenatUserComponent
. - Configura les rutes per al
UserModule
per mostrar elUserComponent
.
Solució
Comandaments per crear el mòdul i el component
user-routing.module.ts
import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { UserComponent } from './user.component'; const routes: Routes = [ { path: '', component: UserComponent } ]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] }) export class UserRoutingModule { }
user.module.ts
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { UserRoutingModule } from './user-routing.module'; import { UserComponent } from './user.component'; @NgModule({ declarations: [UserComponent], imports: [ CommonModule, UserRoutingModule ] }) export class UserModule { }
user.component.ts
import { Component } from '@angular/core'; @Component({ selector: 'app-user', template: `<h1>User Works!</h1>`, styles: [] }) export class UserComponent { }
Conclusió
La càrrega mandrosa de mòduls és una tècnica poderosa per optimitzar el rendiment de les aplicacions Angular. Dividint l'aplicació en mòduls més petits i carregant-los només quan són necessaris, podem reduir el temps de càrrega inicial i millorar l'experiència de l'usuari. Amb la pràctica, aquesta tècnica esdevé una part essencial del desenvolupament d'aplicacions Angular escalables i eficients.
Curs d'Angular
Mòdul 1: Introducció a Angular
- Què és Angular?
- Configuració de l'entorn de desenvolupament
- Arquitectura d'Angular
- Primera aplicació Angular
Mòdul 2: Components d'Angular
- Comprendre els components
- Crear components
- Plantilles de components
- Estils de components
- Interacció de components
Mòdul 3: Enllaç de dades i directives
- Interpolació i enllaç de propietats
- Enllaç d'esdeveniments
- Enllaç de dades bidireccional
- Directives integrades
- Directives personalitzades
Mòdul 4: Serveis i injecció de dependències
Mòdul 5: Enrutament i navegació
Mòdul 6: Formularis a Angular
Mòdul 7: Client HTTP i observables
- Introducció al client HTTP
- Fer sol·licituds HTTP
- Gestionar respostes HTTP
- Utilitzar observables
- Gestió d'errors
Mòdul 8: Gestió d'estat
- Introducció a la gestió d'estat
- Utilitzar serveis per a la gestió d'estat
- NgRx Store
- NgRx Effects
- NgRx Entity
Mòdul 9: Proves a Angular
- Proves unitàries
- Proves de components
- Proves de serveis
- Proves de cap a cap
- Simulació de dependències
Mòdul 10: Conceptes avançats d'Angular
- Angular Universal
- Optimització del rendiment
- Internacionalització (i18n)
- Tubs personalitzats
- Animacions d'Angular