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的cookie的用法
Jan 10 Javascript
from 表单提交返回值用post或者是get方法实现
Aug 21 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
js实现获取div坐标的方法
Nov 16 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
Sep 21 Javascript
微信小程序 页面跳转和数据传递实例详解
Jan 19 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
JS实现简易换图时钟功能分析
Jan 04 Javascript
微信小程序实现的日期午别医生排班表功能示例
Jan 09 Javascript
vue动态注册组件实例代码详解
May 30 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 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采集速度探究总结(原创)
2008/04/18 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
python黑魔法之编码转换
2016/01/25 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
python3中int(整型)的使用教程
2017/03/23 Python
简单了解python数组的基本操作
2019/11/26 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
Python json解析库jsonpath原理及使用示例
2020/11/25 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
大学生秋游活动方案
2014/02/17 职场文书
活动总结书
2014/05/08 职场文书
留学生求职信
2014/06/03 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
PHP中->和=>的意思
2021/03/31 PHP
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
解决python3安装pandas出错的问题
2021/05/20 Python