Performance: Dynamic modules
Dynamic modules affect initial application startup time and bundle size by loading modules only when needed.
import { Module, DynamicModule } from '@nestjs/common'; @Module({}) export class FeatureModule { static forRoot(): DynamicModule { return { module: FeatureModule, providers: [], exports: [], }; } } @Module({ imports: [FeatureModule.forRoot()], }) export class AppModule {}
import { Module } from '@nestjs/common'; import { FeatureModule } from './feature.module'; @Module({ imports: [FeatureModule], }) export class AppModule {}
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Eager module loading | N/A (server-side) | N/A | N/A | [X] Bad |
| Dynamic module loading | N/A (server-side) | N/A | N/A | [OK] Good |
export class LoggerModule {
static forRoot(prefix: string): DynamicModule {
return {
module: LoggerModule,
providers: [
{ provide: 'LOGGER_PREFIX', useValue: prefix },
],
exports: ['LOGGER_PREFIX'],
};
}
}export class CacheModule {
static forRoot(options: { ttl: number }): DynamicModule {
return {
module: CacheModule,
providers: [
{ provide: 'CACHE_TTL', useFactory: (options) => options.ttl },
],
exports: ['CACHE_TTL'],
};
}
}Pass the test and this pattern moves unknown