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 相关文章推荐
JavaScript写的一个DIV 弹出网页对话框
Aug 14 Javascript
测试JavaScript字符串处理性能的代码
Dec 07 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
May 30 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
javascript中的深复制详解及实例分析
Dec 29 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
Sep 19 Javascript
webpack本地开发环境无法用IP访问的解决方法
Mar 20 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 Javascript
node.js调用C++函数的方法示例
Sep 21 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
理解PHP中的stdClass类
2014/04/18 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php实现webservice实例
2014/11/06 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
Python中的变量和作用域详解
2016/07/13 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
python 日期操作类代码
2018/05/05 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
python opencv如何实现图片绘制
2020/01/19 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
人事主管的岗位职责
2013/11/16 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
靠谱的活动总结
2019/04/16 职场文书