javascript性能优化之事件委托实例详解


Posted in Javascript onDecember 12, 2015

本文实例分析了javascript性能优化之事件委托。分享给大家供大家参考,具体如下:

为下面每个LI绑定一个click事件

<ul id="myLinks">
  <li id="goSomewhere" >Go somewhere</li>
  <li id="doSomething" >Do something</li>
  <li id="sayHi" >Say hi</li>
</ul>

一、传统写法

var item1=document.getElementById("goSomewhere");
var item2=document.getElementById("doSomething");
var item3=document.getElementById("sayHi");
item1.onclick = function(){
  console.log('goSomewhere');
}
item2.onclick = function(){
  console.log('doSomething');
}
item3.onclick = function(){
  alert("hello");
}

在javascript中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能,事件越多,性能越差。

导致原因是多方面:

1、每个函数都是对象,都会占用内存;内存中的对象越多,性能就越差。
2、必须事先指定所有事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间。

二、事件委托

对“事件处理程序过多”问题的解决方案就是事件委托。

事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如:click事件会一直冒泡到document层次。也就是说,我们可以为整个页面指定一个onclick事件处理程序,而不必给每个可单击的元素分别添加事件处理程序。

事件委托方法:

var list=document.getElementById("myLinks");
list.onclick = function(e){
  var target = e.target;  
  switch(target.id){
   case "goSomewhere":
    console.log('goSomewhere');
    break; 
   case "doSomething":
    console.log('doSomething');
    break; 
   case "sayHi":
    alert("hello");
    break; 
  }
}

三、使用事件委托的优点:

1)document对象很快就可以访问,而且可以在页面生命周期的任何时间点上为它添加事件处理程序(无需等待DOMContentLoaded或load事件)。换句话说,只要可单击的元素呈现在页面上,就可以立即具备适当的功能。

2)在页面中设置事件处理程序所需的时间更少。只添加一个事件处理程序所需的Dom引用更少,所花的时间也更少。

3)整个页面占用的内存空间更少,能够提升整体性能。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
页面载入结束自动调用js函数示例
Sep 23 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
Apr 16 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
May 27 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
vue实现菜单切换功能
May 08 Javascript
详解js常用分割取字符串的方法
May 15 Javascript
深入理解Antd-Select组件的用法
Feb 25 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 #Javascript
jQuery Validate初步体验(二)
Dec 12 #Javascript
jQuery Validate初步体验(一)
Dec 12 #Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 #Javascript
jQuery同步提交示例代码
Dec 12 #Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 #Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 #Javascript
You might like
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
element中的$confirm的使用
2020/04/26 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python 文件与目录操作
2008/12/24 Python
Python读取网页内容的方法
2015/07/30 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python实现音乐下载的统计
2018/06/20 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
男方父母证婚词
2014/01/12 职场文书
学校十一活动方案
2014/02/01 职场文书
新学期决心书
2014/03/11 职场文书
物理学专业求职信
2014/07/04 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
培训讲师开场白
2015/06/01 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书