`
mutongwu
  • 浏览: 452188 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

事件注册于移除的优化

阅读更多
编写跨浏览器的事件注册、移除代码,一般写法如下:
function addHandler(target, eventType, handler) {
	if (target.addEventListener) { // DOM2 Events
		target.addEventListener(eventType, handler, false);
	} else { // IE
		target.attachEvent("on" + eventType, handler);
	}
}
function removeHandler(target, eventType, handler) {
	if (target.removeEventListener) { // DOM2 Events
		target.removeEventListener(eventType, handler, false);
	} else { // IE
		target.detachEvent("on" + eventType, handler);
	}
}

优化方法一:lazy loading
function addHandler(target, eventType, handler) {
	// overwrite the existing function
	if (target.addEventListener) { // DOM2 Events
		addHandler = function(target, eventType, handler) {
			target.addEventListener(eventType, handler, false);
		};
	} else { // IE
		addHandler = function(target, eventType, handler) {
			target.attachEvent("on" + eventType, handler);
		};
	}
	// call the new function
	addHandler(target, eventType, handler);
}
function removeHandler(target, eventType, handler) {
	// overwrite the existing function
	if (target.removeEventListener) { // DOM2 Events
		removeHandler = function(target, eventType, handler) {
			target.addEventListener(eventType, handler, false);
		};
	} else { // IE
		removeHandler = function(target, eventType, handler) {
			target.detachEvent("on" + eventType, handler);
		};
	}
	// call the new function
	removeHandler(target, eventType, handler);
}

优化方法二:Conditional Advance Loading
var addHandler = document.body.addEventListener ? function(target, eventType,
		handler) {
	target.addEventListener(eventType, handler, false);
} : function(target, eventType, handler) {
	target.attachEvent("on" + eventType, handler);
};
var removeHandler = document.body.removeEventListener ? function(target,
		eventType, handler) {
	target.removeEventListener(eventType, handler, false);
} : function(target, eventType, handler) {
	target.detachEvent("on" + eventType, handler);
};


原文出自:High.Performance.JavaScript
分享到:
评论

相关推荐

    windows服务安装移除工具

    Windows服务不同于普通应用程序,它们不依赖于用户会话,可以在系统启动时自动运行,或者在特定事件触发时启动。服务通常执行特定的任务,如数据备份、系统监控、网络通信等。每个服务都有一个独立的进程,并且可以...

    浏览器事件动态注册和取消

    最后,动态注册和取消事件监听器对于实现响应式设计、优化性能和防止内存泄漏至关重要。例如,当组件被移出视口或不再使用时,应移除其相关的事件监听器,以减少不必要的计算和内存占用。 总之,动态注册和取消...

    还原精灵移除程序

    然而,在需要进行系统优化、升级防护软件或解决兼容性问题时,我们可能需要移除现有的还原精灵程序。在这个过程中,往往会出现安装时提示软件已安装的提示,这通常是因为原软件的注册信息或残留文件未被完全清除,...

    C# 检测USB设备插拔及响应各个事件

    2. **事件处理**: 注册事件处理程序来响应设备插入和移除事件。当设备插入时,`ManagementEventWatcher`的`EventArrived`事件会被触发。在事件处理函数中,我们可以获取到事件的详细信息,如设备的设备ID,然后根据...

    内存优化专家_V7.1注册版

    5. **uninstall.exe**:卸载程序,用于移除内存优化专家_V7.1注册版。 6. **update.exe**:更新程序,允许用户检查和安装软件的最新版本,保持软件的更新和优化。 7. **eAPI.fne** 和 **EChartBar.fne**、**iext2....

    untiy 事件管理器,分发注册的事件,有效降低模块耦合度

    `MEventSystem.cs`可能是项目中自定义的事件管理系统类,用于扩展或优化Unity内置的事件处理机制。 1. **事件注册(Subscription)**:在Unity中,一个游戏对象或者组件可以通过添加事件监听器(EventListener)来...

    解决vue 给window添加和移除resize事件遇到的坑

    此外,性能优化也是处理resize事件时不得不考虑的问题。频繁触发resize事件可能会对性能造成负面影响,尤其是在涉及复杂操作如图表的重绘时。为了解决这一问题,可以利用lodash库的debounce函数来对resize事件进行...

    javascript打造跨浏览器事件处理机制[Blue-Dream出品]

    这两个方法都属于`EventTarget`接口,该接口通常实现于`Node`或`Window`接口,这意味着所有的DOM元素都可以使用这些方法来添加和移除事件监听器。 #### 事件监听 `addEventListener`的使用方式如下: ```...

    [转]事件总线,解决各种和addEventListener有关的麻烦

    总的来说,事件总线是一种优化事件处理和组件间通信的设计模式,通过集中管理和分发事件,降低了组件间的耦合度,提高了代码的可维护性和可扩展性。理解和应用事件总线对于构建大型、复杂的应用程序至关重要。

    Android冷启动时间优化 Android APP启动优化

    合理的配置清单文件可以减少系统对应用启动时间的影响,例如,移除清单中的无用组件声明,合并资源文件。 7. 优化应用中的广播接收器(BroadcastReceiver)。广播接收器的注册和使用需要谨慎,避免在应用启动时响应...

    适用于Unity的快速、强大、GC友好的C#信号事件。_C#_下载.zip

    本资源提供的"适用于Unity的快速、强大、GC友好的C#信号事件",是针对Unity游戏开发中的事件处理机制的一种优化实现,名为Relay。它旨在提高性能,减少垃圾收集(Garbage Collection, GC)的影响,从而避免在游戏...

    小巧好用的图片优化工具

    标题提到的“小巧好用的图片优化工具”显然是一个专注于这方面功能的软件,它提供了中文界面,对于中国用户来说使用起来更为便捷。 描述中指出,该工具支持中文,这意味着它针对中国市场进行了本地化处理,用户无需...

    flex 事件流原理

    Flex 事件流是Flex应用程序中事件处理的核心机制...在实际开发中,不仅要关注事件的触发和处理,还要注意性能优化,避免过多的事件监听导致的性能问题。在多人协作的项目中,明确事件的使用和命名规范也显得尤为重要。

    前端开发之DOM事件机制详解及其应用场景

    内容概要:本文详细介绍了DOM事件的相关概念和技术细节,涵盖事件的注册与移除方式(传统方式 vs 方法监听),解析DOM事件流的不同阶段以及各阶段的工作原理,深入探讨了事件对象、阻止默认行为及阻止冒泡的方法。...

    Nodejs和浏览器的最小事件库

    1. **事件监听器**:事件库的核心是事件监听器,它允许开发者注册回调函数,当特定事件发生时执行这些函数。在Node.js中,我们可能会看到类似`on`、`once`和`removeListener`这样的方法。 2. **事件触发**:事件库...

    关于flex事件的讲解.rar

    Flex事件机制是Adobe Flex框架中的核心组成...通过这份资料“关于flex事件的讲解.pdf”,读者将能够全面掌握Flex事件机制,包括如何创建、监听和处理事件,以及如何优化事件性能,为构建富互联网应用程序打下坚实基础。

    Extjs源码之--Ext事件机制/继承关系

    如果不再需要监听某个事件,可以使用`un`方法来移除事件监听器: ```javascript Ext.Component.un('click', functionToUnbind); ``` 这将确保`functionToUnbind`不再响应'click'事件。 4. **事件委托(Event ...

    网站SEO诊断优化专项方案框架域名空间信息域名注册时间到期.doc

    - **代码优化**:精简CSS和JS,移除冗余代码,确保搜索引擎能顺利抓取。 - **扁平化结构**:目录深度不超过三层,便于导航。 - **栏目标题**:使用关键词命名栏目,提高相关性。 - **404页面**:提供有用信息,...

Global site tag (gtag.js) - Google Analytics