2012-04-17 3 views
5

私は今日、javascriptの先輩の何人かが答えるかもしれないと考えました。複数のMootoolsクラスをインスタンシエートする際のパフォーマンスオーバーヘッド

Mootoolsで複数のクラスを作成する場合の推定DOMオーバーヘッドはいくらですか?

良いOO設計では、コードの再利用可能なビットをクラスに入れる必要があります。しかし、mootoolsのすべての作成されたClassは明示的に "Class"から継承しているので、もちろん追加のインスタンス化も多くなります。

私の多かれ少なかれ哲学的な質問は、すべてのコードがインスタンス化されたオンロードであり、たとえば配列内の数百または数千のクラスを持つDTOパターンを使用すると、ブラウザのパフォーマンスにどれだけ影響を及ぼしますか単純なオブジェクト。

Ponderously、 マイケル

+0

DOMオーバーヘッドは?クラスはオブジェクトであり、DOM内に何も作成しなければ、フットプリントはそこには行きません。オブジェクトも参照渡しされ、継承は他のオブジェクトからコピーされません( 'implement'を使わない限り、オブジェクトキーをコピーします)。あなたのユースケースは何ですか?何百、何千ものクラスが反パターンのように思えます。最大のフットプリントは、作成/処理時間だけでなく、すべてのメソッドラッピングが行われます...少しあなたのニーズを詳しく教えてください –

+0

あなたのコメントありがとう。私が想像している私の使用例は、サーバーからのデータセットをDTOオブジェクトにマッピングすることです。このリストの長さは任意です。だから私は{}スタイルのオブジェクトの配列を持つ代わりに、それぞれのために、例えばPostCodeDTOのインスタンスを作成し、これを代わりに配列に入れると考えています。基本的にクラスの属性mixinを使用してDTOオブジェクトに返品アイテムをラップし、ゲッターとセッターなどを使用してプローバーDTOを作成します。 –

+0

は[shipyard](https://github.com/seanmonstar/)造船所)または[neuro](https://github.com/GCheung55/Neuro)またはEmberまたはBackbone(モデル→回収構造)であっても、あなたのモデルを定義し、それらを収集して何らかの目的でイベントを収穫させる/ビュー。 –

答えて

1

右。ここで私はこれを見ている方法です。まず第一に、@keetoからの引用:

上品

「」最後の部分を滞在が重要です。クラスはモジュラーコードを実装する非常に良い方法ですが、それを行う唯一の方法ではありません。私は最近、いくつかの開発者がすべてのクラスを使用するという不愉快な傾向があることを発見しました。有名なハンマーのように、すべてのコードネイルにクラスが使用されています。これはすべてのものがクラスではないため、残念です。

クラスは、プロジェクト全体で使用できる再利用可能なコードを作成するのに最適です。私は個人的にその基準に固執しています。私が構築しているものが何度も使用されることが確実でない限り、私はクラスに変換しません。気づいていない場合は、単一のカスタムクラスを定義しなくてもMooToolsを使用できます。結局、MooToolsがクラスを持っているからといって、JavaのようにJavaScriptでコード化する必要はありません。 *「」


出典:それは主にあなたが一般的にあなたのクラスとJavaScriptを書く方法に依存してhttp://keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools

これは非常に主観的です。

クラスを使用すると、ペナルティとオーバーヘッドがありません。インスタンス化するクラスのタイプに依存して、これは異なるでしょう。たとえば、クラスが他のオブジェクトに触れたり、DOMに出力したりしない単純なデータ抽象化である場合、インスタンスを作成するのは比較的安いです。コストは処理オプションオブジェクトの周りにあり、(時には)インスタンスコンストラクターにプロパティをコピーすることがあります。クラス定義自体の間

、MooToolsのは(など)-moreから(例えば、initializeImplementsExtendsbinds)すべてのコンストラクタオブジェクトのプロパティをループを行い、すべての特殊なものとミューテータに対処しようとします。これは一回限りです。コンストラクタ関数が作成されたら、すぐに使用できます。

これはまた、関数値を持つすべてのプロパティをラップして、プライベートとして(現在のAPIで.protect()を介して)飾ることができるようにするため、実行する関数はすべてあなたのためにカレー化されます。さらに、メソッドデコレータとしても.bind()を使用する傾向があります。これは、実行される実際のコードに対して2つのラッパーを意味します。

クラスが複雑である(異なるクラスのプロトタイプから拡張して実装する)ほど、クラスのインスタンスを作成する作業が増えることがあります。実際には、絶対的なモンスターを作成する必要があります。これは、メモリの割り当て(開始またはガベージコレクションの遅延)以外のものとしてこれを認識させることです。もちろん、コンストラクタ関数のcpu-heavyまたはasync/blocking stuffは、あなたがそれをたくさんしてもうまくいかないでしょう...

イベント、イベントリスナーなども積み重ねることができます。 オブジェクトへの保存された参照は、時間の経過と共にスタックになります。

はその後、DOM要素にバインドクラスは

一緒にすべてを入れて、それがやや高価なになることができます...自分のイベントをエクスポートし、イベントに耳を傾け、イベントを追加、があります。あなたは、多くの場所から継承しているオブジェクトを作成しています(うまくいけば、プロトタイプチェーンを介して参照することができます)。それでも、クラスコンストラクター自体の定義は高速で、インスタンスが1000個作成されてから面白くなり、最新のブラウザーをテストに適用するまでは作成されません。

関連する問題