gpt4 book ai didi

node.js - NestJS 初创公司的开发速度慢得令人难以置信

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:52 27 4
gpt4 key购买 nike

我在开发环境中的应用程序在启动阶段非常慢。我在不同的地方设置了一些调试日志,看看是什么占用了这么多时间,发现我的 main.ts 实际上使用了将近 9 分钟 😱只是为了得到我的 app.module 已导入!

来源

import { performance } from 'perf_hooks';
const startTime = performance.now();

import { Log } from 'api/common/util/logger/log';
Log.log.info(`┌────────────────────────────────────────────────────────────┐`);
Log.log.info(`│ Starting: ${new Date().toISOString()} │`);
Log.log.info(`└────────────────────────────────────────────────────────────┘`);

// From here -------------------->
import { NestFactory } from '@nestjs/core';
import { ValidationPipe } from '@nestjs/common';
import 'reflect-metadata';
import { existsSync, mkdirSync, writeFile } from 'fs';
import * as express from 'express';
import * as bodyParser from 'body-parser';
import * as helmet from 'helmet';
import * as morgan from 'morgan';
import * as morganBody from 'morgan-body';
// <------ to here, imports fly in as expected.

// Theese take a bit longer, but not enormously
import { Config } from './api/common/config';
import { HttpExceptionFilter } from './api/common/filters/http-exception.filter';
import { LogService } from 'api/common/util/logger/log.service';

// This one takes up the most time on startup (several minutes)
import { AppModule } from './api/app.module';
Log.log.debug(` * imports done in ${(performance.now() - startTime).toFixed(3)}ms`);
Log.log.debug(` * Memory: ${readMem()}`);

function readMem() {
const mem = process.memoryUsage();
const convert = { Kb: n => (n / 1024), Mb: n => convert.Kb(n) / 1024 };
const toHuman = (n, t) => `${convert[t](n).toFixed(2)}${t}`;
return `Used ${toHuman(mem.heapUsed, 'Mb')} of ${toHuman(mem.heapTotal, 'Mb')} - RSS: ${toHuman(mem.rss, 'Mb')}`;
}

输出

生产启动:

$ node dist/main.js
info: ┌──────────────────────────────────────────────────────────────────────────┐
info: │ Starting: 2019-01-29T13:06:13.751Z │
info: │ Memory: Used 6.54Mb of 11.70Mb - RSS: 25.33Mb │
info: │ Runtime: js │
info: └──────────────────────────────────────────────────────────────────────────┘
debug: * imports done in 6862.350ms
debug: * Memory: Used 87.99Mb of 113.76Mb - RSS: 133.58Mb
info: Nest application successfully started
info: ┌──────────────────────────────────────────────────────────────────────────┐
info: │ Memory: Used 93.71Mb of 122.52Mb - RSS: 144.20Mb │
info: │ Launch: 2019-01-29T13:06:25.377Z │
info: │ Time to start: 11991.049ms │
info: │ Bootstrap time: 5124.189ms │
info: └──────────────────────────────────────────────────────────────────────────┘

开发启动:

$ ts-node -r tsconfig-paths/register src/main.ts
info: ┌──────────────────────────────────────────────────────────────────────────┐
info: │ Starting: 2019-01-29T13:08:06.914Z │
info: │ Memory: Used 157.76Mb of 193.62Mb - RSS: 209.77Mb │
info: │ Runtime: ts │
info: └──────────────────────────────────────────────────────────────────────────┘
debug: * imports done in 471159.063ms
debug: * Memory: Used 297.45Mb of 385.35Mb - RSS: 408.90Mb
info: Nest application successfully started
info: ┌──────────────────────────────────────────────────────────────────────────┐
info: │ Memory: Used 216.64Mb of 383.35Mb - RSS: 409.11Mb │
info: │ Launch: 2019-01-29T13:16:05.521Z │
info: │ Time to start: 483228.325ms │
info: │ Bootstrap time: 12042.239ms │
info: └──────────────────────────────────────────────────────────────────────────┘

是的,我开始使用 ts-node,但这是 NestJS 推荐的开发和调试方式。

问题

如何优化启动,使后端的每个微小变化都不需要拖延 10 分钟?我现在的注意力已经够麻烦了,这无济于事。

我的模块太多了吗?如果我结合一些会有帮助吗?我有大约 15 个 DB 实体模型,每个模型都包含在它自己的基于 graphql 的模块中以提高可读性,但其中许多实体模型具有通过在我的模块导入中注入(inject) forwardRef() 来解决的循环依赖关系。这可能是个问题吗?

我尽量包含尽可能少的第三方库以避免 node_modules hell 。我在我的模块中导入的是我自己的代码或 NestJS 框架的东西。当然我不知道加载了多少隐式依赖项,但是我拖着的库数量会影响启动性能吗?如果是这样,我如何监控堆栈中的内容以及每个脚本在评估时消耗了多少内存/cpu?我可以以某种方式预编译其中的一些以增加启动吗?

在生产环境中作为已编译的 javascript 运行时,我没有遇到这个问题。

最佳答案

尝试设置 env TS_NODE_TRANSPILE_ONLY=true

例如TS_NODE_TRANSPILE_ONLY=true ts-node -r tsconfig-paths/register src/main.ts

文档:https://github.com/TypeStrong/ts-node#cli-and-programmatic-options

它加快了我的应用程序启动速度

关于node.js - NestJS 初创公司的开发速度慢得令人难以置信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54418261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com