JavaScript AJAX之惰性載入函數(shù)
在JS中有些內(nèi)存只需執(zhí)行一遍即可,如瀏覽器類型檢測(cè)是最常用的一個(gè)功能,因?yàn)槲覀兪褂肁jax的時(shí)候需要檢測(cè)瀏覽器的內(nèi)置的XHR。我們可以在第一次檢測(cè)的時(shí)候記錄下類型,往后在使用Ajax的時(shí)候就不需要再去檢測(cè)瀏覽器類型了。在JS中就算只有一個(gè)if也總比沒有if的語(yǔ)句效率要高。
普通Ajax方法
/**
* JS惰性函數(shù)
*/
function ajax(){
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"];
for(var i=0,k=version.length;i<k;i++){
try{
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
}catch(ex){
throw ex;
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}else{
throw "No XHR object";
}
}
每次調(diào)用ajax()函數(shù)都要對(duì)瀏覽器內(nèi)置的XHR檢查,效率不高。
使用惰性方式的方法
/**
* JS惰性函數(shù)
*/
function ajax(){
if(typeof XMLHttpRequest != "undefined"){
ajax = function(){
return new XMLHttpRequest();
};
}else if(typeof ActiveXObject != "undefined"){
ajax = function(){
if(typeof arguments.callee.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"];
for(var i=0,k=version.length;i<k;i++){
try{
var xhr = new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
return xhr;
}catch(ex){
throw ex;
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}
}else{
ajax = function(){
throw "No XHR object";
}
}
return ajax();
}
在第二個(gè)惰性方法中if的每個(gè)分支都會(huì)為ajax()變量賦值,有效覆蓋了原有函數(shù),最后一步調(diào)用新的函數(shù)。下一次調(diào)用的ajax()的時(shí)候,就直接調(diào)用變量。
優(yōu)化重點(diǎn)
要執(zhí)行特定代碼只有實(shí)際調(diào)用才執(zhí)行,而某些JS庫(kù)一開始就檢測(cè)瀏覽器,預(yù)先設(shè)置好。
由于加了復(fù)雜的判斷所以首次運(yùn)行速度慢,但后邊的多冊(cè)運(yùn)行的效率會(huì)更快。
有時(shí)候?qū)懘a久了,不能一成不變,要經(jīng)常思考怎樣才能使程序運(yùn)行的更快,更有效率。這樣的思考下寫出來(lái)的程序才是精裝,而不會(huì)產(chǎn)生多余的垃圾代碼。這也不是簡(jiǎn)單OO就能一刀切,實(shí)際上代碼很多地方都是活的,人更是活的。
- JavaScript惰性求值的一種實(shí)現(xiàn)方法示例
- JS設(shè)計(jì)模式之惰性模式(二)
- JavaScript學(xué)習(xí)筆記之惰性函數(shù)示例詳解
- JS 學(xué)習(xí)總結(jié)之正則表達(dá)式的懶惰性和貪婪性
- JS優(yōu)化與惰性載入函數(shù)實(shí)例分析
- js正則表達(dá)式惰性匹配和貪婪匹配用法分析
- 利用函數(shù)的惰性載入提高javascript代碼執(zhí)行效率
- JavaScript 函數(shù)惰性載入的實(shí)現(xiàn)及其優(yōu)點(diǎn)介紹
- 如何用JavaScript實(shí)現(xiàn)一個(gè)數(shù)組惰性求值庫(kù)
相關(guān)文章
livereload工具實(shí)現(xiàn)前端可視化開發(fā)【推薦】
本文將介紹一個(gè)工具--livereload。這是一款能根據(jù)你本地文件(html、css、js)的變化,自動(dòng)跟蹤刷新瀏覽器的實(shí)時(shí)刷新工具,有了這個(gè)工具,會(huì)大大減輕你刷新頁(yè)面的工作量。下面跟著小編一起來(lái)看下吧2016-12-12微信小程序?qū)崿F(xiàn)獲取準(zhǔn)確的騰訊定位地址功能示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)獲取準(zhǔn)確的騰訊定位地址功能,結(jié)合實(shí)例形式詳細(xì)分析了微信小程序使用騰訊地理位置接口的相關(guān)注冊(cè)、操作步驟及接口使用技巧,需要的朋友可以參考下2019-03-03layui獲取選中行數(shù)據(jù)的實(shí)例講解
今天小編就為大家分享一篇layui獲取選中行數(shù)據(jù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-08-08基于dataset的使用和圖片延時(shí)加載的實(shí)現(xiàn)方法
下面小編就為大家分享一篇基于dataset的使用和圖片延時(shí)加載的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2017-12-12List Information About the Binary Files Used by an Applicati
List Information About the Binary Files Used by an Application...2007-06-06基于JavaScript實(shí)現(xiàn)雪花許愿墻特效
新的一年就要到了,你一定有很多想許下的愿望吧!今天小編就為大家?guī)?lái)了一個(gè)基于Html+CSS+JavaScript實(shí)現(xiàn)的帶雪花的許愿墻特效,需要的可以了解一下2022-01-01