大型列表上单击事件的 jQuery 委托(delegate)性能 - 如果动态添加更多元素,速度会变慢?

标签 jquery performance events event-delegation

我有一个像这样的项目的可视列表:

http://jsfiddle.net/viatropos/XCe3T/1/

在真实的应用程序中,我总共只加载 200 个项目。但问题是,即使只有 200 个项目,click 事件也需要几乎一秒钟的时间来调用处理程序。无论列表中有多少项,mouseover 事件回调都会立即执行。

我的问题是,无论页面上有多少元素,委托(delegate)方法不应该一样快吗?我所做的就是这样:

$("body").delegate("a", "click", function(event) { console.log($(event.target).get(0)); return false; }

如果您转到上面的 jsfiddle 示例和 Web 检查器,然后单击渲染结果中的链接,它将添加 200 个以上元素。请注意添加的元素越多,速度就越慢。奇怪的是,如果您从 6000 个项目开始,委托(delegate)/点击的执行速度比您从 2000 个项目开始并一次添加 200 个直到达到 6000 个要快得多。

您的想法是什么?如何提高 jQuery 的 click 事件的 delegate 方法的性能? css 是否会导致速度变慢(可能样式太多或布局未优化)?

最佳答案

根据我的经验,重新初始化(取消绑定(bind)然后再次绑定(bind)事件处理程序)比使用 .live 或 .delegate 更好(性能方面)。 这样您就应该获得所需的性能。 实际上,我会定义一个委托(delegate)变慢的阈值,删除所有绑定(bind)并将事件处理程序重新绑定(bind)到现有的元素集。

关于大型列表上单击事件的 jQuery 委托(delegate)性能 - 如果动态添加更多元素,速度会变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6576853/

相关文章:

jquery - 网页.py |通过 POST 和 AJAX 生成数据(生成器函数)

javascript - 在没有换行占位符的文本旁边插入链接图片

sql-server - SQL Server - Management Studio - 客户端统计 - 服务器回复等待时间与客户端处理时间

当使用窗口函数并且谓词包含变量时,SQL Server 使用扫描而不是搜索

javascript - 为什么单个 document.write 语句同时加载 jquery 缩小文件和完整的 jquery 文件?

javascript - 使用 Jquery 从另一个 Select Option 禁用 Select Option

c++ - Armadillo 库会减慢矩阵运算的执行速度吗?

javascript - 如何从 javascript 小部件中删除所有 jquery 实时事件

java - 一般为: why use click-handlers instead of subclassing?

javascript - 如何在包含事件的情况下使用其他参数