放置 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 数据库中所有可以增加堆大小的数据。
您可以使用 limit
和 skip
为您的端点实现分页。
您还应该考虑 Mongoose
库必须加载到您的内存中,连接到数据库等等,这也需要 RAM。
我不明白为什么当我将 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 数据库中所有可以增加堆大小的数据。
您可以使用 limit
和 skip
为您的端点实现分页。
您还应该考虑 Mongoose
库必须加载到您的内存中,连接到数据库等等,这也需要 RAM。