2012-02-22 5 views
3

私は完全にajax Webプロジェクトで、セクションのコンテンツは常にdomの操作やjqueryのload関数を使って生成されます。私は「ライブ」を使用していましたが、パフォーマンスのメリットとして「ライブ」から離れ、「オン」を使用することに非常に関心があります。新しいページがロードされると、そのセクションに必要な新しいバインディングセットもロードする必要があります。 htmlセクションには、決して変更されない親ドーム(基本的にウェブページの異なるコンテンツエリア用のラッパー)があり、ページ上に作成されるすべての将来のdomエレメントに対してバインディングを行うことができます。Jqueryイベントのパフォーマンスとメモリの使用

一般に、イベントバインディングを処理するためのより良い方法は、メモリとパフォーマンスのトレードオフです。

1)新しいセクションのhtmlの読み込みが終了したら、特定のページインスタンスに必要なすべてのイベントを、ページが変更されたときに削除されるDOM要素にバインドします。

2)常に存在することが知られているdom要素(ライブのようなものではありませんが)は、最初のページのロード時にすべてのイベントをバインドします。

答えて

2

リスナーに関するメモリの問題は、通常、非常に簡単に処理できます(クロージャーで大量のデータを保持せず、循環参照を作成せず、委任を使用するなど)。

"Live"は(私が知る限り)委任を使用しています。単純な基準を使用せずに委託を非常に簡単に実装することができます。クラスまたはID、変更されない親要素のリスナーを使用します。委任は他の多くのリスナーに代わる優れた戦略であり、コンテンツは絶えず変更されており、機能を呼び出すべき要素を特定することは簡単です。

コンテンツが変更されるたびに多数の新しいリスナーを追加する戦略に従う場合は、古いリスナーを置き換える際に、メモリリークの可能性を減らすための戦略として切り離す必要があります。 DOMの更新の一環としてリスナーをアタッチしたり削除したりするのに要する時間の面でのパフォーマンスは、何百ものものを実行していない限り、それほど大きな問題ではありません。 event.target/srcElementは、それがそのイベントのために気遣うものであれば委任して

、親要素は、おそらく場合このの値を設定するコールを使用して、適切な関数を呼び出し、イベント、チェックをリッスン必須。

挿入されたHTMLにインラインリスナーを含めるだけで、メモリリーク、委任、またはリスナーの追加と削除を心配する必要はありません。単純な関数呼び出しを使用するインラインリスナーは、他の属性(クラス、IDなど)を追加するよりも複雑でなく、クライアントでゼロの追加プログラミングを必要としません。私はインラインリスナーがメモリリークの問題ではなかったと考えています。

「邪魔されないjavascript」mobは、うわさになりますが、javascriptをサポートしているすべてのブラウザでサポートされているとは言いませんが、非常に実用的で機能的で堅牢です。

関連する問題