2017-11-23 5 views
0

javascriptノードv8.5.0でコンストラクタ関数のインスタンスを作成する場合と同じように、関数の呼び出しに同じリソースと時間がかかるのですか?パフォーマンスを作成するには何が良いですか?コンストラクタ関数の関数またはインスタンス?

私のように、彼らは私に同じ結果を与えることを見つける:私はmodule.exports = new repo;module.exports = repo();を交換した場合

var repo = function() { 

var db = {}; 

var get = function (id) { 
    console.log('Getting task ' + id); 
    return { 
     name: 'new task from db' 
    } 
} 

var save = function (task) { 
    console.log('Saving ' + task.name + ' to the db'); 
} 

console.log('newing up task repo'); 
return { 
    get: get, 
    save: save 
} 

} 
module.exports = repo(); 

それは私も同じ結果が得られますが、私はより良いパフォーマンスが賢明である1知っている必要があります。あなたがmodule.exports = new repo;を使用して

ので、同じメモリインスタンスを指すようになり、ここでthisで、レポ関数を呼び出すとmodule.exportに戻り値を代入しているmodule.exports = repo();を使用して

+1

私見に簡素化しても

const db = {}; function get(id) { console.log('Getting task ' + id); return { name: 'new task from db' } } function save(task) { console.log('Saving ' + task.name + ' to the db'); } console.log('newing up task repo'); module.exports = { get, save }; 

か:あなたはコードをインライン化できるようにのみ、一度とにかくそれを呼んでいますオブジェクト;理想的には1つ。 'repo()'や 'new repo'を一度しか作成しません。 – lilezek

+2

違いは気にするほど価値がないほど小さいです。むしろ、関数をどの程度正確に使用するかを決めるべきです。 'new'または' new'はありませんか? – deceze

+0

もしそうなら、@decezeを使用するベストプラクティスは何ですか? –

答えて

0

あなたの機能はすでにオブジェクトを返すんので、それは伝統的な意味で(つまりthisキーワードを通じてインスタンスを初期化)コンストラクタではなく、newと呼ばれるべきではありません。それが速いのか遅いのかは問題ではありません。ただしないだけです。 (ヒント:newは、repo.prototypeから新しいインスタンスを作成してからそれを放棄する必要があるため、おそらく遅くなります)。

もちろん、ここでは関数を使用する理由はありません。あなたが唯一のレポの少量を持っていますので、それは問題ではありません

const db = {}; 
exports.get = function (id) { 
    console.log('Getting task ' + id); 
    return { 
     name: 'new task from db' 
    }; 
}; 
exports.save = function (task) { 
    console.log('Saving ' + task.name + ' to the db'); 
}; 
console.log('newing up task repo'); 
0

最初の新しいインスタンスを作成し、新しいインスタンスを割り当てますこの方法のmodule.exportthisは異なるメモリインスタンスになります。

単純な言葉はすべて、同じインスタンスを指すか、新しいインスタンスを作成することで、コードをどのように使用するかによって異なります。

あなたはアーキテクチャを理解していただければ幸いです。

関連する問題