Heim >Web-Frontend >js-Tutorial >JavaScript AJAX Lazy Loading function_javascript Fähigkeiten

JavaScript AJAX Lazy Loading function_javascript Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 16:38:381174Durchsuche

Einige Speicher in JS müssen nur einmal ausgeführt werden. Beispielsweise ist die Browsertyperkennung die am häufigsten verwendete Funktion, da wir bei der Verwendung von Ajax das integrierte XHR des Browsers erkennen müssen. Wir können den Typ bei der ersten Erkennung aufzeichnen und müssen den Browsertyp bei der zukünftigen Verwendung von Ajax nicht mehr erkennen. Selbst wenn es in JS nur eine if-Anweisung gibt, ist diese immer effizienter als keine if-Anweisung.

Normale Ajax-Methode

Code kopieren Der Code lautet wie folgt:

/**
* JS-Lazy-Funktion
​*/

Funktion ajax(){
If(typeof XMLHttpRequest != "undefiniert"){
           return new XMLHttpRequest();                                         }else if(typeof ActiveXObject != "undefiniert"){
If(typeof arguments.callee.activeXString != "string"){
             varversions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"];
for(var i=0,k=version.length;i                   Versuchen Sie es{
                           new ActiveXObject(versions[i]);                      arguments.callee.activeXString =versions[i];
Pause;
                   }catch(ex){
wirf ex;
                }
            }
                                                                       
          return new ActiveXObject(arguments.callee.activeXString);
}else{
throw „Kein XHR-Objekt“; }
}


Bei jedem Aufruf der Funktion ajax() muss das integrierte XHR des Browsers überprüft werden, was nicht effizient ist.


Verwenden Sie den Lazy-Ansatz

Code kopieren

Der Code lautet wie folgt:

/**
* JS-Lazy-Funktion
​*/
 
Funktion ajax(){
    if(typeof XMLHttpRequest != "undefiniert"){
        ajax = function(){
            return new XMLHttpRequest();   
        };
    }else if(typeof ActiveXObject != "undefiniert"){
        ajax = function(){
            if(typeof arguments.callee.activeXString != "string"){
                var version = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"];   
 
                for(var i=0,k=version.length;i                     versuche es{
                        var xhr = new ActiveXObject(versions[i]);  
                        arguments.callee.activeXString = versionen[i];
                        return xhr;
                    }catch(ex){
                        ex werfen;  
                    }
                }
            }  
 
            return new ActiveXObject(arguments.callee.activeXString);
        }
    }else{
        ajax = function(){
            throw „Kein XHR-Objekt“; 
        }
    }
 
    return ajax();
}

在第二个惰性方法中if的每个分支都会为ajax()变量赋值, 有效覆盖了原有函数, 最后一步调用新的函数。下一次调用的ajax()的时候,就直接调用变量。

优化重点

要执行特定代码只有实际调用才执行,而某些JS库一开始就检测浏览器,预先设置好.

由于加了复杂的判断所以首次运行速度慢,但后边的多册运行的效率会更快.
 
有时候写代码久了, 不能一成不变, 要经常思考怎样才能使程序运行的更快, 更有效率.这样的思考下写出来的程序才是精装,而不会产生多余的垃圾代码.这也不是简单OO就能一刀切,实际上代码很多地方都是活的,人更是活的.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn