2

要素からすべての「特定の」ハンドラー (onclick など) を削除する方法や、要素からすべてのイベントを削除する方法などについて、たくさんの質問があります。

  1. Jquery ですべての Click イベント ハンドラーを削除する方法
  2. Jquery:すべてのイベントハンドラーを解放する方法、dom の変更は?

この質問は少し広いです。IE7 および IE8 の asp.net サイトで大量のメモリ リークが発生していました。これらのリークを縮小する調整の 1 つは、ページ上のすべての要素からすべてのイベントをバインド解除することでした。基本的にこれ:

$('*').off();

現在、アプリケーションのパフォーマンスを改善しようとしていますが、当然のことながら、この特定の行はホット スポットの 1 つです。

したがって、問題は、同じ結果 (ドキュメント内のすべての要素からすべてのハンドラーを明示的に削除する) をより効率的に達成する方法はありますか?

ノーゴーオプション:

  • 「ページをリロード」 - メモリ リークはこの方法で保持されます。
  • 「ハンドラーをアタッチするたびに、配列に格納します」-そのような場所が多すぎます

私が考えていたのは、いくつかの jQuery 内部 (おそらく非パブリック API) を使用して、ハンドラーが添付された要素の検出を活用することです。しかし、それは私の現在の jQuery の能力をわずかに上回っています。それが役に立てば、jQuery 1.7.1 をターゲットにしています。

4

1 に答える 1

1

イベントを検出するためにhasEventのようなものを作成できると思いますが、問題は.off()イベントのない要素を呼び出すよりも、DOM を横断していると思われます。確認するためにテストできます。

アプリケーションの性質によっては、セレクターを微調整して要素をより正確にターゲットにすることで、パフォーマンスが向上する場合があります。
参照: http://www.artzstudio.com/2009/04/jquery-performance-rules/

もう 1 つのアイデアは、イベント ハンドラーを追加するjQuery 関数をオーバーライドして、後で使用するために配列を設定できるようにすることです。何百ものファイルを変更する必要はありませんが、後で操作するためにより直接アクセスできます。

于 2013-03-22T02:21:55.267 に答える