Lazy Loading Modules trong NestJS
Lazy Loading Modules là một kỹ thuật quan trọng trong NestJS, giúp tối ưu hiệu suất ứng dụng bằng cách chỉ tải các module cần thiết khi thực sự sử dụng. Điều này rất hữu ích cho các ứng dụng lớn với nhiều module phức tạp, giúp giảm thời gian khởi động và tiết kiệm tài nguyên hệ thống. Thay vì tải tất cả các module ngay từ đầu (eager loading), bạn có thể triển khai lazy loading để chỉ tải module khi nó được yêu cầu.
Cách Hoạt Động Của Lazy Loading Modules
Để thực hiện lazy loading trong NestJS, bạn cần tuân thủ các bước sau:
- Tạo Module cần Lazy Load: Đây là module sẽ được tải khi cần thiết.
- Sử Dụng Dynamic Module Loader: Áp dụng phương pháp import module theo cách động bằng cú pháp
import()
.
Ví Dụ Thực Tế
1. Cấu Trúc Dự Án Mẫu
Giả sử bạn đang phát triển một ứng dụng quản lý nhân sự (HRM) và bạn có các module như sau:
- EmployeeModule: Quản lý thông tin nhân viên.
- ShiftModule: Quản lý ca làm việc.
- ReportModule: Tạo báo cáo.
Khi người dùng yêu cầu tạo báo cáo, bạn quyết định lazy load ReportModule
để tối ưu hóa hiệu suất.
2. Tạo ReportModule
typescript
// report.module.ts
import { Module } from '@nestjs/common';
import { ReportService } from './report.service';
import { ReportController } from './report.controller';
@Module({
controllers: [ReportController],
providers: [ReportService],
})
export class ReportModule {}
3. Lazy Load Module Trong AppModule
typescript
// app.module.ts
import { Module } from '@nestjs/common';
@Module({
imports: [], // Không cần import những module eager như trước
})
export class AppModule {}
Trong một Controller
hoặc Service
, bạn có thể thực hiện lazy loading như sau:
4. Lazy Load Trong Controller
typescript
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
@Controller()
export class AppController {
@Get('load-report-module')
async loadReportModule() {
const { ReportModule } = await import('./report/report.module');
// Logic thực hiện sau khi module được tải, ví dụ gọi service hoặc khởi tạo
return 'ReportModule đã được tải!';
}
}
Ứng Dụng Thực Tế
-
Hệ thống quản lý nhân sự (HRM):
ShiftModule
chỉ được tải khi quản lý cần xem thông tin ca làm việc.PayrollModule
chỉ được tải khi thực hiện tính toán lương.
-
Ứng dụng thương mại điện tử:
OrderModule
được tải khi người dùng vào trang "Đơn hàng".ProductModule
được tải khi người dùng duyệt sản phẩm.
Lợi Ích Của Lazy Loading
- Cải Thiện Hiệu Suất: Giảm thời gian khởi động ứng dụng, đặc biệt khi có nhiều module phức tạp.
- Tiết Kiệm Tài Nguyên: Chỉ tải các module khi cần thiết, giúp tiết kiệm bộ nhớ và hiệu suất.
- Tối Ưu Trải Nghiệm Người Dùng: Người dùng sẽ cảm thấy ứng dụng nhanh chóng hơn khi không phải tải các phần không cần thiết ngay từ đầu.
Liên Quan
- Bài viết tham khảo trên Medium
- Tài liệu chính thức của NestJS
- Xem mã nguồn trên GitHub
- Tham khảo chi tiết hơn tại trang cá nhân
Kết Luận
Lazy Loading Modules là một kỹ thuật tối ưu quan trọng trong NestJS giúp ứng dụng của bạn trở nên mượt mà và hiệu quả hơn. Hãy áp dụng ngay để nâng cao trải nghiệm người dùng cùng với việc tiết kiệm tài nguyên!
source: viblo