作者emn178 (小残)
看板Ajax
标题Re: [问题] 大量事件绑定
时间Sat Jun 8 07:32:00 2013
大量注册事件的确会慢, 例如你的网页有几千几万个<a>,
你逐一找出并注册事件可能会花上一段时间,
然而, 如果你要做的事件其实都是同一个动作, 你可以在上层元素注册事件,
例如<body>, 并判断事件触发者是不是<a>, 再执行该动作即可
这个处理方法的条件是, 事件传递都会经过同样的上层元素, 以及事件内容都相同
※ 引述《gn00742754 (西门猫)》之铭言:
: 我有一个页面,
: 要处理非常多的逻辑,
: 刚开始载入非常慢,
: 我本来以为或许是很多逻辑运算没写好,
: 导致载入速度缓慢,
: 後来稍微测试一下,
: 在整个网页操作的时候速度还算正常,
: 只有刚开始载入非常缓慢,
: 我发现到主要时间都花在注册事件上(delegate、on),
: 请问有什麽方法可以改进吗?
: 目前有想到一个作法是使用setTimeout,
: 慢慢地注册事件,
: 还是说会有更好的解法?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 180.218.155.23
1F:→ mrbigmouth:就算有几千几万个a 除非你用回圈每个a都弄绑一个全新 06/08 10:44
2F:→ mrbigmouth:的function....不然吃的资源还是可以忽略吧 06/08 10:45
3F:→ mrbigmouth:另外原po已经说他使用delegate、on了 06/08 10:45
4F:→ mrbigmouth:"以逐一找出绑上事件"这动作来看 "逐一找出"较占资源 06/08 10:46
6F:→ mrbigmouth:给一万个a绑click事件 在我的浏览器上只跑0.3秒 06/08 10:55
7F:推 mrbigmouth:如果先把一万个a找出来再绑事件...只花0.05秒左右 06/08 10:59
8F:→ mrbigmouth:总而言之 单纯"绑事件"这个动作 不会是效能瓶颈 06/08 10:59
10F:→ emn178:在PC上面的确是不会很慢,在行动装置上才有感觉 06/08 14:00
11F:→ emn178:你的例子在我的电脑上执行时间约1秒,其实还是花不少时间 06/08 14:04
12F:推 mrbigmouth:请看console计的时间 前面要先制造一万个a啊.... 06/08 15:51
13F:→ emn178:console加起来1秒 没错啊 单位不是ms? 06/08 17:25
14F:推 mrbigmouth:这就奇怪了 浏览器是? 怎麽会差这麽多XDDD 06/08 18:25
15F:→ TonyQ:应该这麽说吧,如果这件事情慢,一定还有别的比他更慢.. 06/08 18:25
16F:→ TonyQ:我以前都是再跟几万个 widget 打交道的 XD 06/08 18:27
17F:→ emn178:我之前在android遇过速度很慢,改进後快千倍以上 06/08 20:53