`
阿尔萨斯
  • 浏览: 4169704 次
社区版块
存档分类
最新评论

Javascript性能优化 - 事件委托

 
阅读更多

JavaScript网页开发中经常出现的就是事件处理程序,交互越多可能就需要注册更多的事件处理程序,这也导致了一定的性能问题:

  • 事件处理函数是对象,对象存储于内存空间,对象越多消耗的内存也就越大
  • 事件注册需要在页面交互就绪前访问DOM元素,注册的DOM越多,访问时间越长

解决这个问题的一种方法就是事件委托。事件委托是依赖于事件冒泡机制(IE事件流,从最具体的元素开始接收事件,逐级向上传递直至最顶层文档),我们先来看一个利用事件冒泡为element元素注册一个点击处理程序:

Js代码收藏代码
  1. //DOM2第三个参数为false表示冒泡机制
  2. element.addEventListener("click",function(){
  3. /*...*/
  4. },false);
  5. //IE
  6. element.attachEvent("onclick",function(){
  7. /*...*/
  8. });

事件委托是一个什么概念呢?

其实就是在父级元素上注册事件处理程序(依据事件的具体接收元素执行相应的代码片段),用来替代在多个子孙元素上的事件注册。

举一个偏极端的例子,比如原本页面中有许多DOM元素都绑定了点击事件,现在进行事件委托,只在最顶层的文档(document)注册一个点击处理程序,通过点击事件的target属性可以获得点击具体的接收元素,根据元素的tagName、ID等进行不同的处理就可以实现事件委托。

Js代码收藏代码
  1. document.addEventListener("click",function(event){
  2. //IE的attachEvent函数中是event.srcElement
  3. vartarget=event.target;
  4. switch(target.id){
  5. /*...*/
  6. }
  7. },false);

当然我们应该去实现更加合理的事件委托。

比如一个UL-LI标签栏,点击不同的LI标签则展现对应的内容,如果给每个LI标签都注册一个点击事件会造成一定的性能浪费。我们就可以只在该UL元素上注册一个点击事件通过LI的属性值来区分具体的接收元素,然后就可以进行该LI标签处理程序片段。

Html代码收藏代码
  1. <ulclass="nav">
  2. <liid="bbcode">BBCode编辑器</li>
  3. <liid="visual">可视化编辑器</li>
  4. <liid="preview">预览</li>
  5. </ul>

PS:动态生成的元素也适用于事件委托。

分享到:
评论

相关推荐

    javascript性能优化之事件委托实例详解

    主要介绍了javascript性能优化之事件委托用法,结合实例形式对比分析了JavaScript中事件委托的具体用法与优点,需要的朋友可以参考下

    前端性能优化知识图谱指导

    JS性能优化是指在JavaScript代码的编写和执行过程中,通过一系列的优化策略和技术手段,提高代码的执行效率和性能,从而提升网页或应用程序的响应速度和用户体验。 优化JS性能的方法包括但不限于以下几个方面: 代码...

    javascript相关事件的几个概念

    对于事件来讲,首先,我们需要了解这样几个概念:事件;事件处理程序;事件类型;事件流;事件冒泡;事件捕获;事件对象;事件方面的性能优化(事件委托、移除事件处理程序);常见的浏览器兼容问题。

    jquery 最新版框架下载(1.32-1.8.3)

    jQuery 1.6 版本包括了对属性(Attribute)模型的重要重写,还有诸多性能优化。借此机会感谢jQuery开发团队和jQuery错误分类团队的成员。 jquery1.6.4 此版本较jQuery 1.6.3进行了小幅改进,包括: Data:修复了用“-...

    前端开发常见问题汇总概要总结.docx

    前端开发常见问题涵盖了多个维度,从技术基础知识、编码实践、性能优化到跨平台兼容性等。以下是一些主要的前端开发常见问题及其简要说明: 基础知识不牢固 编程思维和基本算法的理解:新手开发者可能会因为对基础...

    asp.net知识库

    优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 根据基本表结构及其数据生成 INSERT ... 的 SQL 简便的MS SQL 数据库 表内容 脚本 生成器 将表数据生成SQL脚本的...

    solid:一个声明性,高效且灵活JavaScript库,用于构建用户界面

    性能几乎与优化的命令式原始DOM代码几乎没有区别。 参见Solid on 。 小! 完全可摇树的Solid编译器将仅包含您使用的库的一部分。 支持并基于TypeScript构建。 支持现代功能,例如JSX,片段,上下文,门户,暂挂...

    jQuery基础教程(第四版)

    第10章深入讨论委托、截流等大幅提供事件处理性能的技术。同时,还将介绍通过扩展jQuery创建自定义事件和特殊事件的内容。 第11章挖掘了jQuery效果特性的潜力,这一章不仅要讲解如何编写自定义缓动函数,还会介绍在...

    jquery插件使用方法大全

    这一版正式支持事件委托特性。 jQuery 1.3.2(2009年2月):这次小版本升级进一步提升了库的性能,例如改进了:visible/:hidden选择符、.height()/.width()方法的底层处理机制。另外,也支持查询的元素按文档顺序返回...

    asp.net面试题

    sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。 8.列举ADO.NET中的五个...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    6.9 页面状态性能优化策略 238 6.9.1 存储位置优化——把视图状态信息保存在服务端而非客户端 238 6.9.2 体积优化——压缩视图状态数据 240 6.9.3 分块存储视图状态数据 243 6.10 视图状态和控件状态的总结 243 ...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    6.9 页面状态性能优化策略 238 6.9.1 存储位置优化——把视图状态信息保存在服务端而非客户端 238 6.9.2 体积优化——压缩视图状态数据 240 6.9.3 分块存储视图状态数据 243 6.10 视图状态和控件状态的总结 243 ...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    6.9 页面状态性能优化策略 238 6.9.1 存储位置优化——把视图状态信息保存在服务端而非客户端 238 6.9.2 体积优化——压缩视图状态数据 240 6.9.3 分块存储视图状态数据 243 6.10 视图状态和控件状态的总结 243 ...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    6.9 页面状态性能优化策略238 6.9.1 存储位置优化——把视图状态信息保存在服务端而非客户端238 6.9.2 体积优化——压缩视图状态数据240 6.9.3 分块存储视图状态数据243 6.10 视图状态和控件状态的总结243 6.11...

    能源委托前端React

    它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 最小化构建,文件名包含哈希。 您的应用已准备好进行部署! 有关更多信息,请参见有关的部分。 yarn eject 注意:这是单向操作。 eject ,您将...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    常用数据结构(List、Dictionary、Array)、多态、常用设计模式、反射、常用.net类库、泛型、IO流、委托事件、正则表达式、XML、反射、GC等。 2、数据库开发及ADO.Net(6天) 核心技术课程 数据库开发基础、...

Global site tag (gtag.js) - Google Analytics