5

私は実際のアプリケーションで Mongoose の仮想ゲッター メソッドを使い始めており、事前に知っておくとよいパフォーマンスへの影響があるかどうか疑問に思っています。

例えば:

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

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

基本的に、Mongoose が使用するオブジェクトにゲッターがどのように生成されるのか、オブジェクトの初期化時に値が入力されるのか、要求に応じて値が設定されるのかはまだわかりません。

__defineGetter__プロパティをJavascriptのメソッドにマップするために使用できますが、これは仮想ゲッターのためにMongooseによって使用されているようには見えません(コードのクイック検索に基づく)。

別の方法として、初期化時に各仮想パスを設定する方法があります。これは、上記の例で 100 人のユーザーの場合、姓と名を結合するメソッドが 100 回呼び出されることを意味します。

(私は単純化された例を使用しています。ゲッターはもっと複雑になる可能性があります)

生のオブジェクト自体を検査する (例: を使用するconsole.dir) のは少し誤解を招く可能性があります。これは、Mongoose が内部メソッドを使用して、オブジェクトを「プレーンな」オブジェクトまたは JSON に変換する処理を処理するためです。デフォルトでは、getter は含まれません。

これがどのように機能するか、また多くのゲッターが大規模な問題になる可能性があるかどうかを明らかにできる人がいれば、私は感謝します。

4

1 に答える 1