作者grence (多想两分钟 = =")
看板Ajax
标题Re: [问题] 注册Click事件的效能问题
时间Thu Mar 31 01:27:01 2011
※ 引述《nightspirit (鞭策自己社清流夜灵)》之铭言:
: 最近写程式有点疑惑,如果针对连结去做Click事件的绑定,
: 那麽是用一个匿名function配Switch Case好,
: 还是分开绑定不同的匿名function比较好呢?
: HTML
: <a href="#" id="a" class="btn">按钮一</a>
: <a href="#" id="b" class="btn">按钮二</a>
: A作法
: $(".btn").click(function(){
: switch(this.id){
: case 'a':
: // do something
: break;
: case 'b':
: // do something
: break;
: }
: });
: B作法
: $("#a").click(function(){// do something});
: $("#b").click(function(){// do something});
: 就效能/记忆体来说,不晓得那种写法会得到比较好的效果?
JavaScript 很少看到讨论记忆体…除了某破浏览器有名的 memory leak
天晓得浏览器怎麽做资源回收,若有人愿意分享还请补充。
但是只看速度…还是想到几个变因;
.selector:速度 id > class,这是肯定的。
.事件绑定
$(".btn").click(function(){// do something})
v.s.
$("#a").click(function(){// do something})
$("#b").click(function(){// do something})
==
var a=0;
for(var i=0; i<50; i++)a++;
var b=0;
b++; b++; b++; b++; b++; b++; /*.....*/
不用回圈会比较快
$(".btn").click 隐含用回圈跑到每个 dom去绑事件←不确定 jQuery有没有什麽优化
==
如果函数可以重复使用,另外宣告,不要用匿名函数。
function fn(){// do something}
$("#a").click(fn);
$("#b").click(fn);
.函数执行速度:
一个用 switch结合多个动作的 function ←想不到怎麽模拟大量的情况
v.s.
多个单一动作的 function ←用回圈模拟大量的情况,跟一行一行宣告、绑定又不一样
一个大 function肯定比较慢;另外,switch并不快。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 180.176.89.159
1F:推 nightspirit:谢谢解惑~ 这样我大概了解要怎麽做优化了 :P 03/31 02:02
我只是记录我想到的东西,如果没有头绪可以从这几点实验看看;
效能这事…我想只能多方嚐试了,毕竟浏览器也一直在改版……
2F:推 mesak:$('a.btn') or $('a.btn' , $('#btngroup') ) 这种模式会比 03/31 21:52
3F:→ mesak:较快一点 03/31 21:52
※ 编辑: grence 来自: 180.176.89.159 (03/31 22:56)