Maison  >  Article  >  interface Web  >  Compétences de fonction de chargement paresseux JavaScript AJAX_javascript

Compétences de fonction de chargement paresseux JavaScript AJAX_javascript

WBOY
WBOYoriginal
2016-05-16 16:38:381160parcourir

Certaines mémoires en JS ne doivent être exécutées qu'une seule fois. Par exemple, la détection du type de navigateur est la fonction la plus couramment utilisée, car lorsque nous utilisons Ajax, nous devons détecter le XHR intégré au navigateur. Nous pouvons enregistrer le type lors de la première détection, et il n'est pas nécessaire de détecter le type de navigateur lors de l'utilisation future d'Ajax. En JS, même s’il n’y a qu’une seule instruction if, elle est toujours plus efficace que pas d’instruction if.

Méthode Ajax normale

Copier le code Le code est le suivant :

/**
* Fonction paresseuse JS
​*/

fonction ajax(){
Si(typeof XMLHttpRequest != "undefined"){
           renvoyer un nouveau XMLHttpRequest();                                         }else if(typeof ActiveXObject != "undefined"){
If(typeof arguments.callee.activeXString != "string"){
             var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"];
pour(var i=0,k=version.length;i                   essayer{
                            new ActiveXObject(versions[i]);
                     arguments.callee.activeXString = versions[i];
pause;
                   }attraper(ex){
jeter mon ex
                }
            }
                                                                           
          renvoie un nouvel ActiveXObject(arguments.callee.activeXString);
}autre{
lancez "Aucun objet XHR" ;
>
>


Chaque fois que la fonction ajax() est appelée, le XHR intégré au navigateur doit être vérifié, ce qui n'est pas efficace.

Utilisez l'approche paresseuse

Copier le code Le code est le suivant :

/**
* Fonction paresseuse JS
​*/
 
fonction ajax(){
    if(typeof XMLHttpRequest != "undefined"){
        ajax = fonction(){
            renvoie un nouveau XMLHttpRequest();   
        };
    }else if(typeof ActiveXObject != "undefined"){
        ajax = fonction(){
            if(typeof arguments.callee.activeXString != "string"){
                var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"];   
 
                pour(var i=0,k=version.length;i                     essayez{
                        var xhr = new ActiveXObject(versions[i]);  
                        arguments.callee.activeXString = versions[i];
                        retourner xhr ;
                    }attraper(ex){
                        jeter ex;  
                    >
                >
            }  
 
            return new ActiveXObject(arguments.callee.activeXString);
        >
    }autre{
        ajax = fonction(){
            lancer "Aucun objet XHR" ; 
        >
    >
 
    retourner ajax();
>

Il y a un rapport entre if的每个分支都会为ajax() et ajax().函数。下一次调用的ajax()的时候,就直接调用变量。

优化重点

由于加了复杂的判断所以首次运行速度慢,但后边的多册运行的效率会更快。

 

有时候写代码久了,不能一成不变,要经常思考怎样才能使程序运行的更快,更有效率。这样的思考下写出来的程序才是精装,而不会产生多余的垃圾代码。这也不是简单OO就能一刀切,实际上代码很多地方都是活的,人更是活的。

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn