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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
javaScript复制功能调用实现方案
Dec 13 Javascript
JavaScript的内存释放问题详解
Jan 21 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
Apr 26 Javascript
学习JavaScript设计模式之状态模式
Jan 08 Javascript
Jquery获取第一个子元素简单实例
Jun 02 Javascript
PassWord输入框代码分享
Jun 07 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
Vue高版本中一些新特性的使用详解
Sep 25 Javascript
node.js中事件触发器events的使用方法实例分析
Nov 23 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 第二节 数据类型之字符串类型
2012/04/28 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
js date 格式化
2017/02/15 Javascript
js判断是否是手机页面
2017/03/17 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
python中精确输出JSON浮点数的方法
2014/04/18 Python
python中enumerate的用法实例解析
2014/08/18 Python
简介Django中内置的一些中间件
2015/07/24 Python
Python简单实现控制电脑的方法
2018/01/22 Python
python 日期排序的实例代码
2019/07/11 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
期末考试动员演讲稿
2014/01/10 职场文书
民族团结先进个人材料
2014/02/05 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
扬尘污染防治方案
2014/06/15 职场文书
三八活动策划方案
2014/08/17 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
三严三实对照检查材料
2014/09/22 职场文书
电影雷锋观后感
2015/06/10 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
2019 入党申请书范文
2019/07/10 职场文书
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python