2

モデルをロードするための現在のベストプラクティスは何ですか (そして、私が推測するすべての必要なファイルに当てはまります)?

私は解決策を達成するためにこれらの2つの方法を考えています(説明するナンセンスコードは次のとおりです):

var Post = require('../models/post');

function findById(id) {
    return new Post(id);
}

function party() {
    return Post.getParty();
}

function findById(id) {
    return new require('../models/post')(id);
}

function party() {
    return require('../models/post').getParty();
}

これらのスニペットのいずれかが優先されますか? かなりのメモリと時間のトレードオフがありますか? それとも時期尚早の最適化ですか?

4

3 に答える 3

7

これは時期尚早の最適化です ( への呼び出しrequire()はキャッシュされ、冪等です) が、個人的には最初のスタイル (後続の処理ではなく初期化中に依存関係をロードする) の方が適切だと思います。最初にすべてをロードすると、ほとんどのリクエストの実行がわずかに速くなる代わりに、起動がわずかに遅くなります (これはほとんど問題になりません) (ボトルネックを特定してハードコアなプロファイリングを行っていない限り、心配する必要はありません)。

于 2012-09-01T11:04:41.493 に答える
5

最初にを1回呼び出すだけのバージョンを確実に使用する必要がありますrequire。モジュールがロードされる頻度(モジュールは一度だけロードされますが、実行しても)に関しては違いはありませんが、2番目の方法ではパフォーマンスの問題があります。

問題はrequire、Node.jsでブロックしている数少ない関数の1つであるということです。つまり、実行されている限り、Node.jsは着信リクエストを実行できません。起動時にこれは問題ありません。アプリケーションが起動して実行されるまで、しばらく時間がかかります。

ただし、アプリケーションがすでにしばらく実行されている間は、ブロックの瞬間が発生しないようにする必要があります。

したがって、 2番目のオプションについて特別な理由がない場合は、最初のオプションを選択してください

于 2012-09-02T12:48:33.493 に答える
0

require() はロード時ではなく実行時に発生するため、2番目のケースはモジュールの循環依存を回避するのに役立つと思います。

それ以外の場合は、最初の方が (わずかに?) 高速であり、私にとってはかなり読みやすいと思います。

于 2015-11-24T17:31:20.347 に答える