Bird
Raised Fist0
Angularframework~10 mins

Preloading strategies in Angular - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Preloading strategies
App starts
Router initializes
Check preloading strategy
No Preload
Load on
User navigates
Lazy modules loaded if needed
Shows how Angular router decides when and which lazy modules to load based on the chosen preloading strategy.
Execution Sample
Angular
const routes: Routes = [
  { path: 'home', loadChildren: () => import('./home/home.module').then(m => m.HomeModule) },
  { path: 'about', loadChildren: () => import('./about/about.module').then(m => m.AboutModule) }
];

@NgModule({
  imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })],
  exports: [RouterModule]
})
export class AppRoutingModule {}
Defines routes with lazy-loaded modules and sets the router to preload all modules after app start.
Execution Table
StepActionPreloading StrategyModules LoadedReason
1App starts and Router initializesPreloadAllModulesNone yetRouter sets up routes
2Check preloading strategyPreloadAllModulesNone yetStrategy chosen to preload all
3Start preloading lazy modulesPreloadAllModuleshome modulePreloading all modules after start
4Continue preloadingPreloadAllModuleshome, about modulesAll lazy modules preloaded
5User navigates to 'home'PreloadAllModuleshome, about modulesModules already loaded, instant navigation
6User navigates to 'about'PreloadAllModuleshome, about modulesModules already loaded, instant navigation
7End of preloadingPreloadAllModuleshome, about modulesAll lazy modules loaded before navigation
💡 All lazy modules preloaded as per PreloadAllModules strategy, no further loading needed on navigation
Variable Tracker
VariableStartAfter Step 3After Step 4Final
modulesLoaded[][home][home, about][home, about]
preloadingStrategyundefinedPreloadAllModulesPreloadAllModulesPreloadAllModules
Key Moments - 3 Insights
Why are lazy modules loaded before user navigation when using PreloadAllModules?
Because PreloadAllModules tells Angular to load all lazy modules right after app start, as shown in execution_table steps 3 and 4.
What happens if no preloading strategy is set?
Lazy modules load only when the user navigates to their routes, so modulesLoaded stays empty until navigation, unlike PreloadAllModules.
Can we preload only some modules and not all?
Yes, by using a custom preloading strategy that decides which modules to preload, unlike PreloadAllModules which preloads all.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what modules are loaded after step 3?
A[about]
B[]
C[home]
D[home, about]
💡 Hint
Check the 'Modules Loaded' column at step 3 in the execution_table.
At which step does the router finish preloading all lazy modules?
AStep 5
BStep 7
CStep 2
DStep 4
💡 Hint
Look for the step where 'All lazy modules loaded before navigation' is noted.
If we remove the preloadingStrategy option, how would modulesLoaded change at step 3?
AIt would remain empty until navigation
BIt would still preload all modules
CIt would preload only the 'home' module
DIt would preload only the 'about' module
💡 Hint
Refer to key_moments about behavior without preloading strategy.
Concept Snapshot
Angular Preloading Strategies:
- Controls when lazy modules load
- No preload: load on navigation
- PreloadAllModules: load all after app start
- Custom preload: load selected modules
- Improves user experience by loading modules early
- Set in RouterModule.forRoot() options
Full Transcript
This visual guide shows how Angular's preloading strategies work. When the app starts, the router initializes and checks the preloading strategy. If PreloadAllModules is set, Angular loads all lazy modules immediately after startup, before the user navigates. This means navigation to those modules is instant. Without preloading, modules load only when the user visits their routes. Custom strategies allow selective preloading. The execution table traces each step, showing modules loaded and why. Variable tracking shows how the list of loaded modules grows. Key moments clarify common confusions about when modules load. The quiz tests understanding of these steps and effects. This helps beginners see how preloading improves app speed and user experience.

Practice

(1/5)
1. What is the main purpose of preloading strategies in Angular?
easy
A. To load lazy modules in the background to improve navigation speed
B. To prevent any modules from loading until explicitly requested
C. To compile all modules at build time for faster startup
D. To automatically update Angular to the latest version

Solution

  1. Step 1: Understand lazy loading in Angular

    Lazy loading delays loading modules until needed, which can slow navigation initially.
  2. Step 2: Role of preloading strategies

    Preloading strategies load lazy modules in the background after app startup to speed up future navigation.
  3. Final Answer:

    To load lazy modules in the background to improve navigation speed -> Option A
  4. Quick Check:

    Preloading = background loading for faster navigation [OK]
Hint: Preloading means loading modules quietly before needed [OK]
Common Mistakes:
  • Confusing preloading with eager loading
  • Thinking preloading disables lazy loading
  • Assuming preloading updates Angular versions
2. Which of the following is the correct way to enable preloading of all lazy modules in Angular routing?
easy
A. RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
B. RouterModule.forRoot(routes, { preload: true })
C. RouterModule.forRoot(routes, { lazyLoad: true })
D. RouterModule.forRoot(routes, { preloadingStrategy: NoPreloading })

Solution

  1. Step 1: Identify Angular's preloading strategy option

    Angular uses the preloadingStrategy property in router config to set preloading behavior.
  2. Step 2: Recognize the correct strategy for all modules

    PreloadAllModules is the built-in strategy to preload all lazy modules after app loads.
  3. Final Answer:

    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) -> Option A
  4. Quick Check:

    PreloadAllModules = preload all lazy modules [OK]
Hint: Use preloadingStrategy: PreloadAllModules to preload all [OK]
Common Mistakes:
  • Using 'preload: true' which is invalid
  • Confusing NoPreloading with preloading all
  • Using lazyLoad option which doesn't exist
3. Given this Angular routing setup:
const routes = [
  { path: 'home', loadChildren: () => import('./home/home.module').then(m => m.HomeModule) },
  { path: 'admin', loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule) }
];

@NgModule({
  imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })],
  exports: [RouterModule]
})
export class AppRoutingModule {}

What happens after the app loads?
medium
A. Only 'home' module loads eagerly, 'admin' loads on demand
B. 'admin' module preloads, 'home' module does not
C. Neither module preloads; both load on demand
D. Both 'home' and 'admin' modules preload in the background

Solution

  1. Step 1: Analyze the preloading strategy used

    The routing uses PreloadAllModules, which preloads all lazy modules after app startup.
  2. Step 2: Identify lazy loaded modules

    Both 'home' and 'admin' modules are lazy loaded via loadChildren.
  3. Final Answer:

    Both 'home' and 'admin' modules preload in the background -> Option D
  4. Quick Check:

    PreloadAllModules preloads all lazy modules [OK]
Hint: PreloadAllModules preloads every lazy module automatically [OK]
Common Mistakes:
  • Assuming only first lazy module preloads
  • Thinking modules load only on demand with PreloadAllModules
  • Confusing eager loading with preloading
4. Identify the error in this Angular routing configuration:
const routes = [
  { path: 'dashboard', loadChildren: './dashboard/dashboard.module#DashboardModule' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })],
  exports: [RouterModule]
})
export class AppRoutingModule {}
medium
A. Missing 'pathMatch' property in route
B. Using string syntax for loadChildren is deprecated; should use dynamic import
C. Preloading strategy must be NoPreloading when using lazy loading
D. RouterModule.forRoot should not have a second argument

Solution

  1. Step 1: Check loadChildren syntax

    The string syntax ('./dashboard/dashboard.module#DashboardModule') is deprecated in Angular; dynamic import is required.
  2. Step 2: Confirm preloading strategy and other options

    Preloading strategy can be used with lazy loading; no error there. 'pathMatch' is optional here.
  3. Final Answer:

    Using string syntax for loadChildren is deprecated; should use dynamic import -> Option B
  4. Quick Check:

    Use dynamic import() for loadChildren [OK]
Hint: Use dynamic import() syntax for loadChildren [OK]
Common Mistakes:
  • Using old string syntax for loadChildren
  • Thinking preloading strategy conflicts with lazy loading
  • Assuming pathMatch is mandatory for all routes
5. You want to preload only the 'admin' module but not the 'user' module in your Angular app. Which approach correctly implements this custom preloading strategy?
hard
A. Set preloadingStrategy to NoPreloading and preload 'admin' module eagerly
B. Use PreloadAllModules and then lazy load 'user' module manually
C. Create a class implementing PreloadingStrategy that preloads only routes with data.preload = true
D. Mark 'admin' module as eager loaded and 'user' as lazy loaded without preloading

Solution

  1. Step 1: Understand custom preloading strategy

    Angular allows creating a class implementing PreloadingStrategy to control which modules preload.
  2. Step 2: Use route data property to select modules

    By checking data.preload flag in routes, the strategy can preload only selected modules like 'admin'.
  3. Final Answer:

    Create a class implementing PreloadingStrategy that preloads only routes with data.preload = true -> Option C
  4. Quick Check:

    Custom strategy uses data.preload flag [OK]
Hint: Use data.preload flag with custom PreloadingStrategy [OK]
Common Mistakes:
  • Using PreloadAllModules when selective preload is needed
  • Trying to preload modules eagerly without strategy
  • Confusing eager loading with preloading