让 NestJS 冷启动时间从20s提升到3s,Trae只改了这些

## 前言

随着项目的不断完善,我需要记录下项目的一些变化,方便我自己查看,也方便其他人查看。

最近发现项目的冷启动比较慢,需要优化一下。但是,由于项目比较庞大,我需要先理清一下项目的结构,然后才能进行优化。

经常启动时,停留在这里很久才可以启动

## 项目结构

项目结构如下:

现在的Nestjs项目主要是模块化开发,每个模块都有自己的控制器、服务、实体、DTO、枚举、异常、拦截器、守卫、中间件、管道、测试等。

模块之间相互依赖,但是每个模块都是独立的,不会影响到其他模块的运行。

那么冷启动慢是不是是因为模块太多,导致启动时间变长呢?来看看Trae是怎么分析以及优化的。

### 优化

首先我猜测是因为模块太多,导致启动时间变长。那么我就先从模块入手,看看每个模块的启动时间是多少。

我使用了Nestjs提供的--trace参数,来查看每个模块的启动时间。

使用time nest start来查看启动时间,时间来到20s,也是很久了,看看能不能进行一波优化。

在项目的Main.ts添加这两部分代码,来计算冷启动的耗时时间

看看Trae的分析,发现了一个潜在的循环依赖问题!让我检查具体的依赖关系:Interview模块导入了Like和Favorite模块,而Like和Favorite模块又引用了Interview实体。让我进一步检查这些服务的具体实现。

果然是三个模块里面循环依赖导致的,那么为啥还可以跑起来呢?

可以运行的原因是:NestJS 提供了 forwardRef() 这种临时补丁,只是勉强能跑,但问题并没有真正解决。

接着让Trae进行优化,看看能不能不需要我动手就可以把这个潜在的隐患去掉

Trae还检查数据库配置和TypeORM的设置,看看是否有同步加载或其他可能导致启动慢的配置问题。

查看控制台输出,确实TypeORM的配置有问题,很多启动时间都是因为TypeORM的同步加载导致的。

Trae将TypeORM的同步加载设置为false,然后重新启动项目,启动时间从原来的7秒 左右减少到了3秒左右。

优化前的启动时间 优化后的启动时间,Trae太强了,冷启动速度直线提升

总结

首先我们做优化,不是盲目的优化,而是通过分析项目的启动时间,发现有一些模块的启动时间比较长,是因为它们需要连接数据库、初始化缓存、初始化日志等,再对症下药,才能有效果。

当然也可以结合ai帮我们找出优化方案,比如延迟加载、异步加载等,来优化项目的启动时间,trae在优化期间也帮我找出项目的隐患。

相关推荐
世界哪有真情6 小时前
Trae 蓝屏问题
前端·后端·trae
用户4099322502126 小时前
子查询总拖慢查询?把它变成连接就能解决?
后端·ai编程·trae
豆包MarsCode10 小时前
TRAE 设计团队如何玩转 Vibe Coding(上)|高美感页面生成篇
trae
用户4099322502121 天前
PostgreSQL全表扫描慢到崩溃?建索引+改查询+更统计信息三招能破?
后端·ai编程·trae
豆包MarsCode1 天前
TRAE SOLO+豆包 Version1.6+Seedream4.0 打造“AI 识菜通”
trae
用户4099322502122 天前
复杂查询总拖后腿?PostgreSQL多列索引+覆盖索引的神仙技巧你get没?
后端·ai编程·trae
用户4099322502123 天前
只给表子集建索引?用函数结果建索引?PostgreSQL这俩操作凭啥能省空间又加速?
后端·ai编程·trae
pepedd8644 天前
我用Kiro+Claude写了一个MCP Server,让AI真正"感知"真实环境
前端·javascript·trae
用户4099322502125 天前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
后端·ai编程·trae
摘星编程7 天前
Trae Solo+豆包Version1.6+Seedream4.0打造“AI识菜通“
人工智能·trae·doubao