JavaScript惰性载入函数
来源:互联网 发布:python list 去重 编辑:程序博客网 时间:2024/05/29 03:59
因为各大浏览器所使用的JS引擎不同,所以在实现某一个功能时都或多或少的存在差异,导致在写代码时要针对每一个功能给出兼容浏览器的不同实现方式,这样在运行代码时就会造成性能的损耗。所以就出现了惰性载入函数的概念。原理就是:当前浏览器第一次支持以该方法实现某功能,那么在这个页面运行期间会一直都支持该方法。
一般在写兼容性较好的代码时,我们会使用多个if分支语句来判断当前浏览器支持哪种方法,这时如果每次调用函数都把if分支走一遍显然是损耗性能的。下面来看一个简单的例子:
function addEventHandler(element, eventType, func){ if (element.addEventListener){ element.addEventListener(eventType, func, false); }else if (element.attachEvent){ element.attachEvent('on' + eventType, func); }else{ element['on' + eventType] = func; } }
上面的函数,是一个简单的兼容各大浏览器的一个事件注册函数,如果采用上面的这种方式来定义函数,那么函数会在每次执行时都把if分支走一遍,显然不是明智的选择。下面来看一下如何用惰性载入函数来处理中情况吧!
一. 第一种实现方法:函数覆盖
function addEventHandler(element, eventType, func){ if (typeof addEventListener == 'function'){ addEventHandler = function (element, eventType, func){ element.addEventListener(eventType, func, false); } } }else if (typeof attachEvent == 'function'){ addEventHandler = function (element, eventType, func){ element.attachEvent('on' + eventType, func); } }else{ addEventHandler = function (element, eventType, func){ element['on' + eventType] = func; } } return addEventHandler(element, eventType, func); }
将代码改为如上的方式,就可以在整个页面运行期间如果多次调用该函数,只走一遍if分支,因为在第一次运行函数时,if分支中的函数就覆盖了外部的函数。比如在Chrome浏览器中,第一次执行代码后,打印addEventHandler函数将变为如下这样:
function (element, eventType, func){ element.addEventListener(eventType, func, false);}
可以看出分支中的同名函数覆盖了外部的函数。
二. 第二种实现方法:自执行函数
var addEventHandler = (function (element, eventType, func){ if (typeof addEventListener == 'function'){ return function (){ element.addEventListener(eventType, func, false); } }else if (typeof attachEvent == 'function'){ return function (){ element.attachEvent('on' + eventType, func); } }else{ return function (){ element['on' + eventType] = func; } } })();
用自执行函数的方法,函数定义在全局环境的话,当页面一经载入将针对该浏览器的实现方法赋给了addEventHandler函数,只是在第一次载入时耗费资源,将页面载入后,打印addEventHandler函数如下:
function (){ element.addEventListener(eventType, func, false); }
以上是惰性载入函数的实现方式,两种方式都可以避免执行不必要的代码。具体使用根据自己的需求而定。
阅读全文
0 0
- JavaScript 惰性载入函数
- JavaScript 函数惰性载入
- JavaScript 函数惰性载入
- JavaScript函数惰性载入
- JavaScript 惰性载入函数
- JavaScript惰性载入函数
- javascript中惰性载入函数
- JavaScript-编程技巧-惰性载入函数
- JavaScript-JS优化与惰性载入函数
- 利用函数的惰性载入提高javascript代码性能 转
- 利用函数的惰性载入提高 javascript 代码性能
- 利用函数的惰性载入提高javascript代码性能
- 代码优化--惰性载入函数
- 惰性载入
- 惰性载入函数的使用--验证
- javaScript函数惰性加载
- javascript惰性函数
- JavaScript高级函数-----惰性函数
- Hadoop2.6.5集群搭建(包含单节点安装方法)
- Hibernate中@OneToMany与ManyToOne的mappedBy和@JoinColumn区别
- kindeditor的使用心得
- 2262. Goldbach's Conjecture
- js中的预解析(变量提声)、作用域链、闭包机制
- JavaScript惰性载入函数
- 【PAT】【Advanced Level】1023. Have Fun with Numbers (20)
- maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
- MariaDB开启慢查询日志
- 域名忘记续费后的问题
- display:table-cell的集中应用
- 解决Perhaps you are running on a JRE rather than a JDK ?的问题
- CCF201403-3 命令行选项
- 文件编程之C库函数