5

私は今日、JavaScriptの先輩の何人かが答えられるかもしれないと思いました。

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

優れたオブジェクト指向設計では、再利用可能なコードをクラスに含める必要があります。しかし、mootoolsで作成されたすべてのクラスは明示的に「クラス」から継承するため、もちろん、多くの余分なインスタンス化が行われます。

したがって、私の(多かれ少なかれ哲学的な)質問は、単純なオブジェクトと比較して、すべてのコードがオンロードでインスタンス化され、たとえば配列内に数百または数千のクラスを持つDTOパターンを使用する場合、ブラウザのパフォーマンスにどの程度影響するかということです。

素晴らしく、マイケル

4

1 に答える 1

1

右。これが私がこれをどのように見るかです。何よりもまず、@ keetoからの引用:

上品な滞在

''最後の部分は重要です。クラスはモジュラーコードを実装するための非常に優れた方法ですが、それを実行する唯一の方法ではありません。最近、一部の開発者がすべてにクラスを使用するという不快な傾向があることがわかりました。ことわざのハンマーのように、クラスはすべてのコーディングネイルに使用されています。これは、すべてのものがクラスであるとは限らないため、残念なことです。

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


ソース: http: //keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools

これは、クラスとJavaScriptの一般的な記述方法に大きく依存するため、非常に主観的です。

クラスの使用には、ペナルティとオーバーヘッドがないわけではありません。インスタンス化するクラスのタイプに応じて、これは異なります。たとえば、クラスが他のオブジェクトに触れたりDOMに出力したりしない単純なデータ抽象化である場合、インスタンスを作成するのは比較的安価です。コストは、オプションオブジェクトの処理と、(場合によっては)インスタンスコンストラクターへのプロパティのコピーに関連します。

initializeクラス定義自体の間に、MooToolsはすべてのコンストラクターオブジェクトプロパティをループし、すべての特別なプロパティとミューテーター(たとえば、、、、、(from -more)など)を処理しようとImplementsExtendsますbinds。ただし、これは1回限りです。コンストラクター関数が作成されると、それをすばやく使用できます。

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

クラスが複雑になるほど(さまざまなクラスプロトからの拡張と実装)、クラスのインスタンスの作成により多くの作業が必要になる可能性があります。実際には、これをメモリ割り当て(開始またはガベージコレクションの遅延)以外のものとして認識し始めるには、絶対モンスターを作成する必要があります。もちろん、コンストラクター関数のCPUヘビーまたは非同期/ブロッキングのものも、たくさん行うといいでしょう...

イベント、イベントリスナーなども積み重なる可能性があります。保存されたオブジェクトへの参照は、時間の経過とともに積み重なっていきます。

次に、DOM要素にバインドし、イベントを追加し、イベントをリッスンし、独自のイベントをエクスポートするクラスがあります...

すべてをまとめると、いくらかコストがかかる可能性があります。多くの場所から(できればプロトタイプチェーンを介した参照によって)継承するオブジェクトを作成しています。それでも、クラスコンストラクター自体の定義は高速であり、何千ものインスタンスを作成して初めて、物事が面白くなり、最新のブラウザーをテストできるようになります。

于 2012-04-26T15:51:05.803 に答える