5

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

例如:

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

User.virtual('name.full').get(function () {
  return this.name.first + ' ' + this.name.last;
});

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

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

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

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

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

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

4

1 回答 1

2

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

Object.defineProperty(someInstance, propertyName, {get: yourGetter});

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

于 2012-11-20T14:55:57.523 回答