欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript AJAX之惰性載入函數(shù)

 更新時(shí)間:2014年08月27日 10:56:12   投稿:junjie  
這篇文章主要介紹了JavaScript AJAX之惰性載入函數(shù),惰性載入表示函數(shù)執(zhí)行的分支僅會(huì)發(fā)生1次,是種JS的優(yōu)化技巧,需要的朋友可以參考下

在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方法

復(fù)制代碼 代碼如下:

/**
 * 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檢查,效率不高。

使用惰性方式的方法

復(fù)制代碼 代碼如下:

/**
 * 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í)際上代碼很多地方都是活的,人更是活的。

相關(guān)文章

最新評(píng)論