【问题标题】:When should you NOT use event delegation?什么时候不应该使用事件委托?
【发布时间】:2014-04-06 18:29:18
【问题描述】:

通常,您应该始终将一组元素委托给父级,但好奇是否在任何时候使用它更昂贵的性能明智,或者,什么时候需要它真正?委派 10 个处理程序真的可以节省那么多性能吗? 100? 1000?我应该在什么时候花时间弄清楚如何将事件委托给父视图。由于视图是独立的并且不知道父视图,因此委托并非易事,所以很好奇我在现代浏览器中这样做究竟能获得什么性能提升。

【问题讨论】:

  • 然后创建您的用例的一些基准/性能配置文件。哪一点对更有效?任何“性能”差异是否重要?如果不是,那么请使用更简洁的方法。
  • 你几乎不会需要它。当您确实需要它时,您会注意到。 Don't prematurely optimize.也许有趣的阅读:Moving from classic event management to event delegation in JavaScript OOP
  • @user2864740 我正在寻找整体策略和模式。如,“如果它少于 N 个处理程序,那么您可能不需要它”。为所有项目带来的信息。
  • 如果您没有性能问题(将通过性能基准/配置文件指示),您不需要需要(或不需要)委托。考虑有多少项目/站点不使用单个委托 - 没有任何“性能”问题。如果/当它允许更清晰地处理问题时,应该使用委派,通常不是出于“性能”原因。
  • 当你有很多元素时,委托是很好的,尤其是在可预测的层次结构中的临时元素,比如网格或花式列表。如果你只是有一个简单的表格你想要爵士乐,那就没有必要了。这些天的趋势是通过越位绑定向内联事件发展,甚至它被称为 ngclick 而不是 onclick...

标签: javascript performance delegation


【解决方案1】:

当您只想对元素的某些部分执行事件操作时。然后你使用事件委托。

但如果你想跳过某些部分的事件操作,那么你不应该使用事件委托。

你可以通过

来停止传播

$('form#global_search_ajax_post_form').delegate('.global-category-list li a', 'click', function(e){
     e.stopPropagation();  
});

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多