我有一个网格,有一个列包含<a>锚标记,在<data-..>标记中有一些附加信息,并有一个类名<class='myspeciallink'>.在我不引人注目的JS脚本中,我选择具有该类名的所有元素并应用live('click').我需要它是live()因为网格是在运行时生成的.
live('click')处理程序内部会发生什么?我使用其他数据并<div>根据该数据添加到页面.而这又用于生成jQuery UI对话框.它在我的电脑上运行良好.
但!怎么能在现实世界中发挥作用?我是否应该对可能的性能影响感到困扰?我觉得瞬间
对十几个元素应用live()会影响性能.特别是像我这样的处理器相当复杂 - 它需要获取数据,解析数据,创建div,应用对话框等.
这闻起来像一个糟糕的设计?你能否提出一个不同的方法,或者我的担忧是没有根据的?我可以使用某种分析器工具来查找我的javascript中的瓶颈吗?
UPD:仍然没有人建议任何分析工具.firebug和chrome dev工具很好,但也许有更好的东西?
live("click")从性能的角度来看,实际上更好的是:您不是将事件处理程序绑定到每个匹配的元素,而是应用一个事件处理程序,该事件处理程序等待事件冒泡,然后查看触发事件的元素是否与选择器匹配.live被叫去。
将此与$('selector').click(...)循环每个元素并绑定新的事件处理程序进行比较。live('click')无论有多少页面元素与其选择器匹配,都没有额外的开销。根据选择器匹配的元素数量,使用.live可以避免在每个页面的初始加载期间最多几秒钟的延迟。
但是,事件处理程序必须检查针对其选择器冒泡的每个事件,以查看是否存在匹配。这将为每个点击事件增加少量开销,但您的用户很可能不会注意到差异。
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |