【问题标题】:livequery performance实时查询性能
【发布时间】:2011-06-16 14:58:30
【问题描述】:

我最近discovered 说 jQuery 的 livequery 插件可能非常浪费,因为它不使用事件委托而是绑定所有可绑定事件并在每次更改时重新检查整个 DOM

如果有人对使用 livequery 和 .live() 的最佳实践有更多信息或建议,我将不胜感激

【问题讨论】:

  • 正如下面“patrick dw”的回答中所指出的,.live() 和 .delegate() 几乎是由 livequery 的同一作者集成到核心中的 - 请参阅他的博客:@ 987654322@ 至少据我所知 :)

标签: jquery livequery


【解决方案1】:

你很少需要像livequery 这样的插件。可能您真正需要它的唯一时间是,如果您需要对其他一些您无法修改的 jQuery 代码对 DOM 所做的更改做出反应,

虽然.live() 确实使用事件委托,但它是在document 级别上使用的,这意味着它需要处理页面上的所有 事件,以查看它们是否与每个提供的选择器匹配事件类型。

这两者的一个更好的替代方案 (IMO) 是 delegate()(docs) 方法,它使用事件委托,就像 .live() 一样,但允许您将其限制在页面的特定部分。

$('#someContainer').delegate('a.someButton', 'click', function() {
    // do something when an "a.someButton" inside "#someContainer" is clicked
});

请注意,事件委托方法响应浏览器事件,而不是对 DOM 的更改。如果您需要根据对 DOM 所做的更改运行某些代码,则需要在对 DOM 进行更改时运行该代码

【讨论】:

  • 这是一个很好的答案,但请记住,这种方法仅适用于冒泡的事件。某些事件,例如“无效”(当表单元素验证失败时触发)不会冒泡,因此无法通过委托捕获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多