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变量作用域使用中常见错误总结
Mar 26 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
浅析JavaScript声明变量
Dec 21 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
纯js三维数组实现三级联动效果
Feb 07 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
对angularJs中$sce服务安全显示html文本的实例
Sep 30 Javascript
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
vue实现页面滚动到底部刷新
Aug 16 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
Mar 08 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
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 定义404页面的实现代码
2012/11/19 PHP
srcElement表格样式
2006/09/03 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
Python如何生成树形图案
2018/01/03 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
python操作excel的方法
2018/08/16 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
解决pip install psycopg2出错问题
2020/07/09 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
学生实习介绍信
2014/01/15 职场文书
党员批评与自我批评
2014/02/12 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
党员三严三实心得体会
2014/10/13 职场文书
组织生活会发言材料
2014/12/15 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle