您好,登錄后才能下訂單哦!
這篇文章主要介紹了JS優(yōu)化與惰性載入函數(shù)的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
惰性載入函數(shù)
由于現(xiàn)在瀏覽器之間的差異,為了實(shí)現(xiàn)跨瀏覽器工作,很多函數(shù)要書寫大量if語句或者try…catch…語句。當(dāng)每次調(diào)用函數(shù)時,都要對每個if分支或try語句進(jìn)行檢查,這樣會使得瀏覽器反應(yīng)變慢。實(shí)際上,當(dāng)我們用某個瀏覽器打開網(wǎng)頁時,就決定了某個if分支或try語句是可用的,沒有必要每次調(diào)用都檢查。為了解決以上問題,JavaScript中出現(xiàn)一種名為惰性載入的技巧。
惰性載入表示函數(shù)執(zhí)行的分支僅會發(fā)生一次。有兩種實(shí)現(xiàn)惰性載入的方式:在函數(shù)被調(diào)用時再處理函數(shù);在聲明函數(shù)時就指定適當(dāng)函數(shù)。
借用JavaScript高級程序設(shè)計(jì)中的例子來說明這兩種解決方案。
創(chuàng)建XHR對象的兼容寫法如下:
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"]; for (var i=0,len=versions.length; i < len; i++){ try { var xhr = new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; return xhr; } catch (ex){ //skip } } } return new ActiveXObject(arguments.callee.activeXString); } else { throw new Error("No XHR object available."); } }
使用惰性載入的第一種方法——在函數(shù)被調(diào)用時再處理函數(shù):
function createXHR(){ if(typeof XMLHttpRequest!="undefined"){ createXHR=function(){ return new XMLHttpRequest(); }; }else if(typeof ActiveXObject!="undefined"){ createXHR=function(){ 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){ //skip } } } return new ActiveXObject(arguments.callee.activeXString); }; }else{ createXHR=function(){ throw new Error("No XHR object available."); }; } return CreateXHR(); }
使用惰性載入的第二種方法——在聲明函數(shù)時就指定適當(dāng)函數(shù):
var createXHR=(function(){ if(typeof XMLHttpRequest!="undefined"){ return function(){ return new XMLHttpRequest(); }; }else if(typeof ActiveXObject!="undefined"){ return function(){ 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){ //skip } } } return new ActiveXObject(arguments.callee.activeXString); }; }else{ return function(){ throw new Error("No XHR object available."); }; } })();
上例中,使用的是一個匿名、自執(zhí)行的函數(shù),用以確定應(yīng)該使用哪個函數(shù)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“JS優(yōu)化與惰性載入函數(shù)的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。