Hone logo
Hone
Problems

Implementing Lazy Loading in an Angular Application

Lazy loading is a crucial optimization technique for Angular applications, especially those with many routes and components. It involves loading modules and their associated components only when they are needed, improving initial load time and overall application performance. This challenge asks you to implement lazy loading for a specific feature module within an existing Angular project.

Problem Description

You are tasked with creating a new feature module named Products in an existing Angular application and implementing lazy loading for it. The Products module should contain a single component, ProductListComponent, which displays a list of products (for simplicity, you can hardcode a small array of product objects within the component). The application should initially load only the core module and the Products module should only be loaded when the user navigates to the /products route.

Key Requirements:

  • Create a Feature Module: Create a new Angular module named ProductsModule.
  • Create a Component: Within the ProductsModule, create a component named ProductListComponent that displays a list of products. Each product should have a name and a price.
  • Implement Lazy Loading: Configure the application's routing module (app-routing.module.ts) to lazy load the ProductsModule when the /products route is accessed.
  • Navigation: Ensure that navigating to /products triggers the loading of the ProductsModule and displays the ProductListComponent.
  • Initial Load Time: Verify that the initial load time of the application is significantly faster than if the ProductsModule were loaded eagerly.

Expected Behavior:

  1. When the application starts, only the core module should be loaded.
  2. Navigating to the /products route should trigger the loading of the ProductsModule.
  3. The ProductListComponent should be rendered, displaying the list of products.
  4. The application should remain responsive during the initial load and when navigating to the lazy-loaded route.

Edge Cases to Consider:

  • Route Configuration Errors: Ensure the route configuration is correct to prevent routing errors.
  • Module Loading Failures: Consider how the application should handle potential errors during module loading (though error handling is not required for this challenge).
  • Navigation Timing: While not a strict requirement, observe the timing of module loading and component rendering to understand the benefits of lazy loading.

Examples

Example 1:

Input: User navigates to the root route ('/')
Output: The application loads and displays the initial view (e.g., a home page). The ProductsModule is NOT loaded.
Explanation: The application only loads the core module initially.

Example 2:

Input: User navigates to the '/products' route.
Output: The ProductsModule is loaded, and the ProductListComponent is rendered, displaying a list of products (e.g., [ { name: "Laptop", price: 1200 }, { name: "Mouse", price: 25 } ]).
Explanation: The ProductsModule is loaded on demand when the user navigates to the specified route.

Constraints

  • Angular Version: Assume Angular version 16 or later.
  • Module Structure: The ProductsModule should be a standalone module.
  • Data Source: The ProductListComponent can use a hardcoded array of product objects as its data source. No external API calls are required.
  • Performance: The lazy loading implementation should demonstrably improve initial load time compared to eager loading. While precise measurements aren't required, the difference should be noticeable.
  • Routing: Use Angular's built-in routing mechanism.

Notes

  • Focus on the core concept of lazy loading – loading modules on demand.
  • Consider using the loadChildren property in your routing configuration to specify the lazy loading path.
  • The path should point to a file that exports the ProductsModule.
  • This challenge is primarily about demonstrating the implementation of lazy loading; extensive error handling or complex UI features are not required.
  • Ensure your project is set up correctly with Angular CLI before starting. You can create a new project using ng new my-lazy-loading-app.
Loading editor...
typescript