放置 mongodb 查询时,JS 堆总大小增加了大约 120MB

Total JS heap size increases about 120MB when placing a mongodb query

我不明白为什么当我将 mongodb 数据库查询放在我的控制器中的函数内时堆大小不断增加。

这是我的路由器

import { Router } from "express";
import profileController from '../controllers/profileController';

class userRouter {
  public router: Router;

  constructor() {
    this.getRoutes();
  }

  getRoutes() {
    this.router.get("/profile-list", profileController.getProfileList);
  }
}

export default new userRouter().router;

这是我的控制器

import Profile from "../models/profile";

export class profileController {
  static async getProfileList(req: any, res: any, next: any) {
    try {
      const getList = await Profile.find();
      res.status(200).json({
        status: 200,
        message: "Success",
        data: getList,
      });
    } catch (error) {
      console.log(error);
    }
  }
}

这是我的模型

import * as mongoose from "mongoose";
import { model } from "mongoose";

const profileSchema = new mongoose.Schema({
  userId: { type: String, required: true },
  name: { type: String,  default: ""},
},
{ timestamps: true }
);

export default model("profile", profileSchema);

没有 getProfileList 函数的总堆大小 => 135 MB

放置 getProfileList 函数后的总堆大小 => 255 MB(特别是放置 const getList = await Profile.find(); 之后)

这里我检查了内存,对比发现了这个:

TypeObject 从 3MB 增加到 99MB (数组)从 26MB 增加到 88MB

任何请帮助我理解为什么会发生?还是在这种情况下很常见。

问题是您没有使用任何限制,因此使用 await Profile.find(); 将 return 数据库中的所有文档,因此当您调用控制器时,将 return 数据库中所有可以增加堆大小的数据。

您可以使用 limitskip 为您的端点实现分页。

您还应该考虑 Mongoose 库必须加载到您的内存中,连接到数据库等等,这也需要 RAM。