使用Node.js在Mongoose中使用虚拟getter会对性能产生影响吗?

时间:2012-11-20 14:50:04

标签: javascript performance node.js mongoose

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

例如:

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

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

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

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

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

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

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

如果有人能说明这是如何运作的,以及大量的吸气剂是否会成为一个大规模的问题,我会很感激。

1 个答案:

答案 0 :(得分:1)

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

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

......含义"不是初始化"。在初始化时读取虚拟属性会破坏虚拟属性的点,我想。