jQuery live 事件绑定性能测试

本文通过实际测试比较了jQuery中live方法与普通事件绑定方式在内存消耗方面的表现。结果显示,在绑定大量DOM元素的情况下,live方法展现出更好的内存管理效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天和我们可爱的后端架构师在争论这个问题,我很多UI组件中大量使用了jQuery live进行事件绑定,众所周知它最直观的好处在于可以一直“监听”我们操作,对于新增的DOM节点也会有效,而不需要重新绑定。也许是因为这个“监听”让我们很多人联想到他会不断的去绑定、判断,会造成性能问题,这也是他给我的意见,真的是这样吗?

在我开始认识live之前,我也看过网上很多文章说live会降低性能,昨天架构师也给我这么一篇:《jQuery性能优化指南》,此文说到live上完全就是避重就轻,原因都还没谈直接给出定结论——“虽然我把绑定事件重新写了一次,代码多了点,但这种方式的效率明显高于live()方式,特别是在频繁的DOM操作中,这点非常明显。”,鄙视之。

在此之前,我认为我这篇文章是毫无意义的,因为live是类似于绑定父节点,去监听子节点产生的冒泡才去执行相应的事件,这种代理的好处几乎已经得到js编程哥公认了。可是前端面对环境的问题往往要比后端复杂,这也是前端经常需要与人分享的原因,通过前端工程师不断的积累让很多浏览器的问题明朗起来,让彼此避免陷入泥潭中。理论上的争执永远比不过一个实测来得直观。下面是我对live与普通绑定的内存占用测试:

环境:IE8。 工具:sIEve。 jQuery:1.42
普通方式:
  1. jQuery(function($){
  2.         var li = '<li><a href="#">test</a></li>',
  3.         newLi = li;

  4.         for (i = 0; i < 6000; i++) {
  5.                   newLi += li;
  6.         };
  7.         $('#test').html(newLi);
  8.         $('#test a').click(function(){
  9.                   alert(0);
  10.                   return false;
  11.         });
  12. });
复制代码


测试结果:绑定前 20880KB | 绑定后 64932KB | 执行事件后 64980KB

live 代理方式:
  1. jQuery(function($){
  2.         var li = '<li><a href="#">test</a></li>',
  3.         newLi = li;

  4.         for (i = 0; i < 6000; i++) {
  5.                   newLi += li;
  6.         };
  7.         $('#test').html(newLi);
  8.         $('#test a').live('click', function(){
  9.                   alert(0);
  10.                   return false;
  11.         });
  12. });
复制代码


测试结果:绑定前 21056KB | 绑定后 20936KB | 执行事件后 20936KB

从结果可以得知在内存消耗方面live几乎完胜(执行效率与这个无关)。总之绑定6000次与绑定1次的区别还是比较大的。

前段时间我也浅浅的阅读了jQuery的源码,也曾经尝试写过自己的微型DOM引擎,因为我认为解决jQuery常用的方法可以控制在8Kb之内,后来在处理事件机制的时候才知道这个是无法“微型”,无法自动处理内存泄漏,所以jQuery源码中有一大片地方是给事件机制的,在1.42源码中竟然达到了1069行!

了解jQuery应该从他实现的原理开始,也可以自己尝试写DOM操作引擎,看别人造轮子与自己造轮子都会让一切将明朗起来!

事件代理机制扩展阅读:http://bbs.51js.com/viewthread.php?tid=87369&page=1&fromuid=81151#pid607391

本文原文: http://www.planeart.cn/?p=835
一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值