JavaScript 函数惰性载入
来源:互联网 发布:怎么优化网页关键词 编辑:程序博客网 时间:2024/05/14 14:29
最近看JavaScript高级程序设计,大有收获,接下来几天写一下读书笔记。之前写了一篇Ajax初步理解的随笔,里面有个函数用来创建XmlHttpRequest对象,浏览器兼容性原因,写出的代码通过大量if判断或者try,catch语句将函数引导到正确代码处。
<script type="text/javascript"> function createXHR(){ var xhr = null; try { // Firefox, Opera 8.0+, Safari,IE7+ xhr = new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xhr = null; } } } return xhr; } </script>
每次调用这个函数的时候,都要先进行浏览器能力检查,首先检查浏览器是否支持内置的XMLHyypRequest对象,如果不支持然后检查各版本基于ActiveX的XMLHttpRequest,每次调用该函数都是这样,其实当第一次执行完后,如果浏览器支持某个特定XMLHttpRequest对象,那么下次执行的时候这种支持性并不会改变,没必要再进行一边检测,即使只有一个if语句,执行也肯定比没有要慢,如果我们可以让if语句不必每次执行,那么就可以在频繁调用的情况下提高执行速度。解决方案就是称之为惰性载入的技巧。
惰性载入
惰性载入表示函数执行的分支只会在函数第一次掉用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。createXHR函数可以被改写为这样
function createXHR(){ var xhr=null; if(typeof XMLHttpRequest !='undefined'){ xhr = new XMLHttpRequest(); createXHR=function(){ return new XMLHttpRequest(); } }else{ try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); createXHR=function(){ return new ActiveXObject("Msxml2.XMLHTTP"); } } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); createXHR=function(){ return new ActiveXObject("Microsoft.XMLHTTP"); } } catch (e) { createXHR=function(){ return null; } } } } return xhr; }
在这个惰性载入的createXHR中第一次执行的时候每个分支都会为createXHR重新赋值,覆盖原函数,返回xhr对象,而第二次执行的时候就会直接调用重写后的函数,这样就不必执行每个分支重新做检测了。
优点
惰性载入函数有两个主要优点,第一是显而易见的效率问题,虽然在第一次执行的时候函数会意味赋值而执行的慢一些,但是后续的调用会因为避免的重复检测更快;第二个是要执行的适当代码只有当实际调用函数是才执行,很多JavaScript库在在加载的时候就根据浏览器不同而执行很多分支,把所有东西实现设置好,而惰性载入函数将计算延迟,不影响初始脚本的执行时间。
- JavaScript 惰性载入函数
- JavaScript 函数惰性载入
- JavaScript 函数惰性载入
- JavaScript函数惰性载入
- JavaScript 惰性载入函数
- JavaScript惰性载入函数
- javascript中惰性载入函数
- JavaScript-编程技巧-惰性载入函数
- JavaScript-JS优化与惰性载入函数
- 利用函数的惰性载入提高javascript代码性能 转
- 利用函数的惰性载入提高 javascript 代码性能
- 利用函数的惰性载入提高javascript代码性能
- 代码优化--惰性载入函数
- 惰性载入
- 惰性载入函数的使用--验证
- javaScript函数惰性加载
- javascript惰性函数
- JavaScript高级函数-----惰性函数
- synergy在Windows和Linux下使用全攻略(多台PC共享一套键盘鼠标)
- phpstorm yii 方法提示
- Laravel 的 Homestead 开发环境部署
- eclipse开始加载启动,启动不了解决
- HBase 常用Shell命令
- JavaScript 函数惰性载入
- <学习笔记> 学习 Ionic 随笔
- Dereferencing a __weak pointer is not allowed due to possible null value caused by race condition, a
- Synergy工具 共享Windows系统电脑Linux系统电脑 鼠标键盘
- Mybatis快速入门
- 数据库
- CFStringRef和NSString之间的转换
- Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
- egit的merge合并冲突解决方法