2012-10-09 13 views
5

DOMのサイズが比較的大きく、エレメントのイベントをトリガーするときにクロームのパフォーマンスが大幅に低下することに気付きました。 1つのイベント:大規模なDOMでクロムイベントトリガーに時間がかかります

myElem.trigger('myevent.myscope',arguments); 

は14msです。 (22.0.1229.92 m)

firefox 15.0.1とmsie 9で同じイベントがトリガーするのに1ミリ秒未満かかる!

要素はjqueryオブジェクトであり、キャッシュされているため、トリガーの前にDOMルックアップが発生しません。私は、あなたの質問にこれはないではない直接的な答えはゲイリーに

+0

イベントリスナーコードを投稿できますか? – Derek

+0

@Derekイベントはトリガーされますが、イベントのイベントリスナーは常にあるとは限りません。イベントのトリガはウィジェット内で行われる。 'loaded.mywidget'にはイベントリスナーが存在することもあります。本文を行うか、ウィジェットを持つ要素で直接バインドすることができます。 – garyrgilbert

+1

テストするコードがないときは、パフォーマンスをチェックするのは難しいです...幸運! – Derek

答えて

1

をconsole.time()

console.time('trigger'); 
myElem.trigger('myevent.myscope',arguments); 
console.timeEnd('trigger'); 

誰かがこのような状況で光のビットを当てることができます

おかげ

を使用しています。

カスタムイベントに関する私の経験では、私はトリガー/ jqueryイベントの使用を避けるでしょう。

jQueryのバージョンによって異なります。トリガーがドームツリーを泡立て、かなり長い時間がかかります。 jQueryの1.3、.trigger()のよう

」エドイベントバブルアップDOMツリー; イベントハンドラがイベントに.stopPropagation()メソッドを ハンドラからfalseを返すか、呼び出すことにより、泡立ちを停止することができますイベントに渡されたオブジェクト 」 - 。trigger

私の個人的ソリューションは、ピーター・ヒギンズPubsubを使用することです。

jquerys 'on'のパフォーマンスの違いを示すjsperfテストを作成しました(青はpubsub、赤はjquery、Longerはより良い[operations per second])。今から PUBSUB vs Jquery http://jsperf.com/peter-higgins-pubsub-vs-tiny-pubsub

それは、などのイベント、上にマウスをクリックするとなるとカスタムイベント、とjQueryを扱うとき、私はのpubsubを使う上。

ちょうど私の2セント。

+0

技術的には答えはありませんが、問題の「解決策」なので、これを答えとしてマークしています。リスナーを持つかもしれないし、ないかもしれないイベントをトリガーする代わりに、pubsubアプローチは、より多くのリーンになり、DOM上に多くの "ノイズ"を避けるでしょう。 – garyrgilbert

関連する問題