この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 9589|答える: 0

[JavaScript] Javascrip{filter}t:デザインパターンのメタモードについて深く理解しましょう

[リンクをコピー]
掲載地 2018/07/30 10:30:45 | | |
紹介

フライウェイトモードは、共有技術を用いて大量の細粒度オブジェクトを効果的にサポートし、同じ内容を持つ多数の小クラスのオーバーヘッド(例えばメモリ消費)を回避し、全員がクラスを共有できるように(メタクラス)を実現しています。

プログラミングでは、データを表現するために大量の細かなクラスインスタンスを作成する必要があり、これらのインスタンスが基本的に同じオーバーヘッド(パラメータがいくつかある以外)であれば、インスタンス化すべきクラス数を大幅に減らせます。 もしこれらのパラメータをクラスインスタンスの外に移動し、メソッドが呼び出されたときに渡せれば、共有することで個々のインスタンス数を大幅に減らせます。

JavaScriptでメタモードを適用したらどうなるのでしょうか? 方法は2つあります。1つ目は主にメモリ内の多数の類似オブジェクトにデータレイヤーに適用されます。 2つ目はDOMレイヤーに適用され、中央イベントマネージャーで使用することで、親コンテナ内の各子要素にイベントハンドルを割り当てるのを避けられます。

メタバースとデータレイヤーをお楽しみください

Flyweightには二つの重要な概念があります。内部状態の本質的(introsic)と外部的な状態(external state extrinsic)です。内部状態は内部手法を通じてオブジェクト内で管理され、外部情報は削除または保存可能です。

率直に言えば、まずオリジナルモデルをピンチし、その後異なる場面や環境で、それぞれの特徴を持つ特定のモデルを作り出すということです。もちろん、ここでは異なる新しいオブジェクトを生成する必要があります。そのため、工場モードはフライウェイトモードに現れることが多く、フライウェイトの内部状態は共有に使われ、フライウェイト工場は内部状態のオブジェクトを保存するためのフライウェイトプール(パターンプール)を維持する責任を負います。

元元モードを使いましょう

もしすべての本を管理するライブラリがあった場合、各本のメタデータは仮に次のようなものになることを示しましょう:

身分証
タイトル
著者
ジャンル
ページ数
出版社ID
ISBN

また、各本がいつ、誰が貸し出し、返却日や入手可能かを明確にする必要があります。

チェックアウト 日付
チェックアウトメンバー
返還日
入手可能性

ブックオブジェクトが以下のコードに設定されているため、まだ最適化されていないことに注意してください:


最初はプログラム自体が問題ないかもしれませんが、時間が経つにつれて本の数が大量に増え、各本に異なるバージョンや数量が存在し、システムがどんどん遅くなっていくことに気づくでしょう。 メモリには何千もの本のオブジェクトが存在し、共有モードで最適化する必要があります。

データを内部データと外部データの2種類に分けることができ、書籍オブジェクトに関連するデータ(タイトル、著者など)は内部属性に、(checkoutMember、dueReturnDateなど)は外部属性に帰属できます。 このようにして、次のコードは同じ本の同じオブジェクトを共有することができます。なぜなら、誰が借りても同じ本であれば基本情報は同じだからです:



基本工場を定義する

本のオブジェクトが以前に作成されているかどうかを確認し、作成されていれば戻り、作成されていなければ再作成して保存する基本的なファクトリーを定義し、これにより各種類の本ごとにオブジェクトだけを作成することができます。



外部ステータスの管理


外部の状態は比較的シンプルですが、私たちがまとめた本を除いて、その他はすべてここで管理する必要があります。



この方法により、同じ書籍の情報をBookmanagerオブジェクトに保存でき、しかも1つのコピーだけを保存できます。 前のコードと比べて、多くのメモリが節約されていることがわかります。

メタモードとDOMを楽しんでください


DOMのバブル事件についてはここではあまり触れませんが、皆さんはすでに知っていると思います。例を2つ挙げましょう。

例1:集中型インシデント管理
例えば、メニューやul内の複数のliなど、クリックイベントを監視する必要がある類似した要素や構造が多数ある場合、イベントバインディングのためにさらに多くの要素を割り当てる必要があります。非常に多くの要素がある場合は、パフォーマンスを想像できます。さらにバブルの知識と組み合わせることで、任意の子要素にイベントトリガーがあれば、トリガー後に上位の要素にバブルされます。この機能を使ってXiangyuanモードを利用できます。 これらの類似要素の親要素のイベントを監視し、どの子要素がイベントをトリガーしているかを判断してから、さらに操作を進めることができます。

ここではjQueryのbind/unbindメソッドを例として組み合わせます。

HTML:



JavaScript:



例2:向遠モードを適用してパフォーマンスを向上させる

もう一つの例はjQueryに関連していますが、一般的にイベントのコールバック関数で元素オブジェクトを使い、しばしば$(this)という形を使います。実際、これは繰り返し新しいオブジェクトを作成します。なぜなら、コールバック関数のこのオブジェクト自体がすでにDOM要素だからです。次のコードを使わなければなりません。



実際、もし$(this)のようなものを使う必要があるなら、単一インスタンスパターンの独自のバージョンも実装できます。例えば、jQuery.signle(this)のような関数でDOM要素自体を返すことができます:



使い方:



これにより、jQueryオブジェクトを作成することなくDOM要素自体をそのまま返します。

概要


フライウェイトモードはプログラムの効率とパフォーマンスを向上させるモードで、プログラムのランニングスピードを大幅に向上させます。 応用は多岐にわたります。例えば、データベースから文字列の連続を読みたい場合、その多くは重複しているため、これらの文字列をFlyweightプールに保存できます。

もしアプリケーションが大量のオブジェクトを使用し、その大量のオブジェクトがストレージの幸福度を大きく引き出す場合、共有モードの使用を検討すべきです。 オブジェクトの外部状態を削除すれば、多くのオブジェクトグループを比較的少ない共有オブジェクトに置き換えることができ、Xiangyuanモードの使用も検討できます。

参考住所:http://www.addyosmani.com/resour ... ok/#detailflyweight





先の:アイコンアイコンを見つけるには3つのウェブサイトをおすすめします
次に:保留中のメッセージ数、待ち受けているメッセージ、メッセージタグ...
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com