私の主な質問は次のとおりです。
頻繁にアクセスされる関数 (オブジェクトを返す) があり、人々に操作してもらいたい場合、情報の隠蔽によってパフォーマンス (CPU/メモリの両方) が損なわれますか?
または、特にnode.js(long running process)のようなプラットフォームを使用する場合、これはマイクロ最適化と見なされます。情報隠蔽よりもパフォーマンスを考慮する必要がありますか?
情報隠蔽に関する Douglas Crockford の記事を読んで 、プライベート メンバーと特権メソッドを追加できることを知りました。しかし、Douglas Crockford のこの引用によると、プロトタイプ メカニズムはメモリの節約に役立ちます。
メンバーが検索され、オブジェクト自体に見つからない場合は、オブジェクトのコンストラクターのプロトタイプ メンバーから取得されます。継承にはプロトタイプメカニズムが使用されます。また、メモリを節約します。
メモリのみが節約される場合、メモリは秒単位で安くなるため、これはそれほど大きな問題ではないかもしれません。しかし、John Resig のこの記事によると、多くのプロパティをプロトタイプ チェーンに追加する方が高速です (CPU)。
したがって、頻繁にアクセスされる (オブジェクトを返す) 関数があり、ユーザーに操作してもらいたい場合は、オブジェクトのプロパティをプロトタイプ チェーンに入れてインスタンス化することをお勧めします。
一連のプロトタイプ プロパティを使用して関数をインスタンス化するのは、非常に高速です。モジュールパターンなどを完全に水から吹き飛ばします。したがって、頻繁にアクセスされる (オブジェクトを返す) 関数があり、ユーザーに操作してもらいたい場合は、オブジェクトのプロパティをプロトタイプ チェーンに入れてインスタンス化することをお勧めします。
// Very fast function User(){} User.prototype = { /* Lots of properties ... */ }; // Very slow function User(){ return { /* Lots of properties */ }; }
CPU はかなり高速になっているため (ムーアの法則)、これもそれほど大きな問題ではないかもしれません。さらに、Javascript エンジンはパフォーマンスに関して信じられないほどの進歩を遂げたので、これを検討するべきか、それとも単に情報隠蔽を使用するべきなのか疑問に思っています。
私はまた、私が推測するこのサブ質問を持っています:
node.js などのプラットフォームを使用してメモリと CPU の両方を効果的に測定するにはどうすればよいでしょうか?