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 Prototype对象
Jan 07 Javascript
同一个表单 根据要求递交到不同页面的实现方法小结
Aug 05 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
js实现的切换面板实例代码
Jun 17 Javascript
JS获取时间的方法
Jan 21 Javascript
Flow之一个新的Javascript静态类型检查器
Dec 21 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
Jan 08 Javascript
从零学习node.js之express入门(六)
Feb 25 Javascript
js中DOM事件绑定分析
Mar 18 Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 06 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
JS中的作用域链
2017/03/01 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
React Native预设占位placeholder的使用
2017/09/28 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python模块常用用法实例详解
2019/10/17 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
python第三方库学习笔记
2020/02/07 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
保安岗位职责
2014/02/21 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
合作协议书格式
2014/08/19 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
煤矿安全保证书
2015/02/27 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
服务器间如何实现文件共享
2022/05/20 Servers