实时查询性能

Posted

技术标签:

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

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

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

【问题讨论】:

正如下面“patrick dw”的回答中所指出的,.live() 和 .delegate() 几乎是由 livequery 的同一作者集成到核心中的 - 请参阅他的博客:@ 987654322@ 至少据我所知 :) 【参考方案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 进行更改时运行该代码

【讨论】:

这是一个很好的答案,但请记住,这种方法仅适用于冒泡的事件。某些事件,例如“无效”(当表单元素验证失败时触发)不会冒泡,因此无法通过委托捕获。

以上是关于实时查询性能的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch的实时搜索性能为啥比solr好

入门教程SequoiaDB+PostgreSQL数据实时检索最佳实践

Elasticsearch(ES)底层写流程,包含查询性能高的原因(秒级处理),近实时(Near RunTime)特性

基于 MaxCompute 的实时数据处理实践

10.Flink实时项目之订单维度表关联

流计算 Oceanus | 巧用 Flink 构建高性能 ClickHouse 实时数仓