惰性载入函数

2017-12-22  本文已影响0人  Daniel_Y

因为浏览器之间行为的差异,多数JavaScript 代码包含了大量的if 语句,将执行引导到正确的代码中。看看下面来自上一章的createXHR()函数。
function createXHR(){
if (typeof XMLHttpRequest != "undefined"){
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined"){
if (typeof arguments.callee.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0",
"MSXML2.XMLHttp"],
i,len;
for (i=0,len=versions.length; i < len; i++){
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (ex){
//跳过
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error("No XHR object available.");
}
}
每次调用createXHR()的时候,它都要对浏览器所支持的能力仔细检查。首先检查内置的XHR,然后测试有没有基于ActiveX 的XHR,最后如果都没有发现的话就抛出一个错误。每次调用该函数都是这样,即使每次调用时分支的结果都不变:如果浏览器支持内置XHR,那么它就一直支持了,那么这种测试就变得没必要了。即使只有一个if 语句的代码,也肯定要比没有if 语句的慢,所以如果if 语句不必每次执行,那么代码可以运行地更快一些。解决方案就是称之为惰性载入的技巧。

上一篇 下一篇

猜你喜欢

热点阅读