6

デリゲートがエイリアスバインディングまたは on() よりも高速に見える理由を誰かが説明できますか。

これはテストケースです:

jsPerf

$('p').on('click',$.noop); //80% slower

$('p').click($.noop); //84% slower

$(document).delegate("p", "click",$.noop); //fastest

jquery ソースを確認すると、イベントをバインドする前に、デリゲートの jquery チェックが行われるようです。

それは正しい記述ですか、それとも他に何かありますか?

4

3 に答える 3

6

あなたが犯した誤りは、p 要素が 1 つしかないと考えたことです。

私は別のテストを追加しました. onlyconsole.log($('p').length);を使用して、テストから 7 p が表示されていることが示されました.その可視性は、準備コードで構築した HTML に限定されていません.

これは、最初の 2 つの関数がさらに 7 回のバインドを行う必要があることを意味します。

于 2013-04-16T19:08:54.180 に答える
5

デリゲートは、要素をルックアップする必要がないため、より高速です。要素の代わりにセレクターを使用すると、デリゲートが最も遅くなります

<div>
<p>test</p>
</div>


$('p').on('click',$.noop);
$('p').click($.noop);
$('div').delegate("p", "click",$.noop);

http://jsperf.com/test-on-click-delegate/3

于 2013-04-16T19:02:16.367 に答える