在 Mongoose 和 Node.js 中使用虚拟 getter 对性能有影响吗?

Jed*_*son 5 javascript performance mongoose node.js

我开始在现实世界的应用程序中使用 Mongoose 中的虚拟 getter 方法,我想知道使用它们是否会对性能产生影响,最好预先了解一下。

例如:

var User = new Schema({
  name: {
    first: String,
    last: String
  }
});

User.virtual('name.full').get(function () {
  return this.name.first + ' ' + this.name.last;
});
Run Code Online (Sandbox Code Playgroud)

基本上,我还不明白 getter 是如何生成到 Mongoose 使用的对象中的,以及这些值是在对象初始化时还是按需填充。

__defineGetter__ 可用于将属性映射到 Javascript 中的方法,但 Mongoose 似乎并未将其用于虚拟 getter(基于对代码的快速搜索)。

另一种方法是在初始化时填充每个虚拟路径,这意味着对于上面示例中的 100 个用户,连接名字和姓氏的方法被调用 100 次。

(我使用的是一个简化的例子,getter 可能要复杂得多)

检查原始对象本身(例如 using console.dir)有点误导,因为 Mongoose 使用内部方法来处理将对象转换为“普通”对象或 JSON,默认情况下不包括 getter。

如果有人能阐明这是如何工作的,以及是否有大量 getter 可能会成为大规模问题,我将不胜感激。

Ry-*_*Ry- 2

他们可能是使用标准方式完成的:

Object.defineProperty(someInstance, propertyName, {get: yourGetter});
Run Code Online (Sandbox Code Playgroud)

...意思是“不在初始化时”。我认为,在初始化时读取虚拟属性会破坏虚拟属性的意义。