作者tomin (蓝蓝紫黄橘 粉灰白绿咖)
看板Ajax
标题Re: [问题] 事件绑定在父节点
时间Tue Nov 23 14:46:22 2010
※ 引述《mesak (米沙)》之铭言:
: $('#parent_p').bind('click',function(evt){
: var o=evt.target;
: alert( $(o).attr('id') )
: })
: $('#parent_p a', $('#parent_p') ).bind('click',function(){
^^^^^^^^^^^改成a
: alert( $(this).attr('id') )
: })
: 两者是不是 效能差不多??
我测的结果 前者比较快
console.time('profile 6');
for ( var i=0; i < 10000; i++) {
$('a',$('#primary')[0]).click(function(){});
}
console.timeEnd('profile 6');
console.time('profile 7');
for ( var i=0; i < 10000; i++) {
$('a','#primary').click(function(){});
}
console.timeEnd('profile 7');
console.time('profile 8');
for ( var i=0; i < 10000; i++) {
$('#primary').click(function(event){var o=event.target});
}
console.timeEnd('profile 8');
6,7,8分别是2121ms, 1003ms, 266ms
不同DOM、不同jQuery版本可能会测出不同结果 我的结果就跟别人的不太一样
http://brandonaaron.net/blog/2009/06/24/understanding-the-context-in-jquery
我测到的其他结果(in jQuery 1.4.3)有
1.一般情况(绑定事件不多时)下 delegate比live快
需大量绑定时,live比较快
2. $('#primary a'); //173ms
>> $('a','#primary'); //216ms
>= $('#primary').find('a'); //228ms
後两者其实差不多,互有高低。
我比较惊讶的是第一种selector永远是最快的。
虽然我喜欢这样的结果,但不太有把握这是正确答案。
而且selector对速度的影响满大的,selector後面接什麽method倒是其次。
3.context有时会表现不佳 worst case会特别慢
到底该怎麽有效的「重覆」利用它哩?
比如在外部宣告context,共用同一个context
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.30.198
※ 编辑: tomin 来自: 140.122.30.198 (11/23 14:57)
1F:推 mesak:感谢 测试与解答 !! 11/23 18:18
2F:→ TonyQ:第一个会最快是可能是因为抄 qSA的捷径。 11/23 18:41