html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

JavaScript AJAX之惰性载入函数_javascript技巧_

[ ] 已经帮助:人解决问题

在JS中有些内存只需执行一遍即可,如浏览器类型检测是最常用的一个功能,因为我们使用Ajax的时候需要检测浏览器的内置的XHR。我们可以在第一次检测的时候记录下类型,往后在使用Ajax的时候就不需要再去检测浏览器类型了。在JS中就算只有一个if也总比没有if的语句效率要高。hjpHTML5中文学习网 - HTML5先行者学习网

普通Ajax方法hjpHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
hjpHTML5中文学习网 - HTML5先行者学习网
/**hjpHTML5中文学习网 - HTML5先行者学习网
 * JS惰性函数hjpHTML5中文学习网 - HTML5先行者学习网
 */hjpHTML5中文学习网 - HTML5先行者学习网
 hjpHTML5中文学习网 - HTML5先行者学习网
function ajax(){hjpHTML5中文学习网 - HTML5先行者学习网
    if(typeof XMLHttpRequest != "undefined"){hjpHTML5中文学习网 - HTML5先行者学习网
        return new XMLHttpRequest();    hjpHTML5中文学习网 - HTML5先行者学习网
    }else if(typeof ActiveXObject != "undefined"){hjpHTML5中文学习网 - HTML5先行者学习网
        if(typeof arguments.callee.activeXString != "string"){hjpHTML5中文学习网 - HTML5先行者学习网
            var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"];    hjpHTML5中文学习网 - HTML5先行者学习网
 hjpHTML5中文学习网 - HTML5先行者学习网
            for(var i=0,k=version.length;i<k;i++){hjpHTML5中文学习网 - HTML5先行者学习网
                try{hjpHTML5中文学习网 - HTML5先行者学习网
                    new ActiveXObject(versions[i]); hjpHTML5中文学习网 - HTML5先行者学习网
                    arguments.callee.activeXString = versions[i];hjpHTML5中文学习网 - HTML5先行者学习网
                    break;hjpHTML5中文学习网 - HTML5先行者学习网
                }catch(ex){hjpHTML5中文学习网 - HTML5先行者学习网
                    throw ex;   hjpHTML5中文学习网 - HTML5先行者学习网
                }hjpHTML5中文学习网 - HTML5先行者学习网
            }hjpHTML5中文学习网 - HTML5先行者学习网
        }   hjpHTML5中文学习网 - HTML5先行者学习网
 hjpHTML5中文学习网 - HTML5先行者学习网
        return new ActiveXObject(arguments.callee.activeXString);hjpHTML5中文学习网 - HTML5先行者学习网
    }else{hjpHTML5中文学习网 - HTML5先行者学习网
        throw "No XHR object";  hjpHTML5中文学习网 - HTML5先行者学习网
    }hjpHTML5中文学习网 - HTML5先行者学习网
}hjpHTML5中文学习网 - HTML5先行者学习网
hjpHTML5中文学习网 - HTML5先行者学习网
每次调用ajax()函数都要对浏览器内置的XHR检查,效率不高。hjpHTML5中文学习网 - HTML5先行者学习网

使用惰性方式的方法hjpHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
hjpHTML5中文学习网 - HTML5先行者学习网
/**hjpHTML5中文学习网 - HTML5先行者学习网
 * JS惰性函数hjpHTML5中文学习网 - HTML5先行者学习网
 */hjpHTML5中文学习网 - HTML5先行者学习网
 hjpHTML5中文学习网 - HTML5先行者学习网
function ajax(){hjpHTML5中文学习网 - HTML5先行者学习网
    if(typeof XMLHttpRequest != "undefined"){hjpHTML5中文学习网 - HTML5先行者学习网
        ajax = function(){hjpHTML5中文学习网 - HTML5先行者学习网
            return new XMLHttpRequest();    hjpHTML5中文学习网 - HTML5先行者学习网
        };hjpHTML5中文学习网 - HTML5先行者学习网
    }else if(typeof ActiveXObject != "undefined"){hjpHTML5中文学习网 - HTML5先行者学习网
        ajax = function(){hjpHTML5中文学习网 - HTML5先行者学习网
            if(typeof arguments.callee.activeXString != "string"){hjpHTML5中文学习网 - HTML5先行者学习网
                var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"];    hjpHTML5中文学习网 - HTML5先行者学习网
 hjpHTML5中文学习网 - HTML5先行者学习网
                for(var i=0,k=version.length;i<k;i++){hjpHTML5中文学习网 - HTML5先行者学习网
                    try{hjpHTML5中文学习网 - HTML5先行者学习网
                        var xhr = new ActiveXObject(versions[i]);   hjpHTML5中文学习网 - HTML5先行者学习网
                        arguments.callee.activeXString = versions[i];hjpHTML5中文学习网 - HTML5先行者学习网
                        return xhr;hjpHTML5中文学习网 - HTML5先行者学习网
                    }catch(ex){hjpHTML5中文学习网 - HTML5先行者学习网
                        throw ex;   hjpHTML5中文学习网 - HTML5先行者学习网
                    }hjpHTML5中文学习网 - HTML5先行者学习网
                }hjpHTML5中文学习网 - HTML5先行者学习网
            }   hjpHTML5中文学习网 - HTML5先行者学习网
 hjpHTML5中文学习网 - HTML5先行者学习网
            return new ActiveXObject(arguments.callee.activeXString);hjpHTML5中文学习网 - HTML5先行者学习网
        }hjpHTML5中文学习网 - HTML5先行者学习网
    }else{hjpHTML5中文学习网 - HTML5先行者学习网
        ajax = function(){hjpHTML5中文学习网 - HTML5先行者学习网
            throw "No XHR object";  hjpHTML5中文学习网 - HTML5先行者学习网
        }hjpHTML5中文学习网 - HTML5先行者学习网
    }hjpHTML5中文学习网 - HTML5先行者学习网
 hjpHTML5中文学习网 - HTML5先行者学习网
    return ajax();hjpHTML5中文学习网 - HTML5先行者学习网
}hjpHTML5中文学习网 - HTML5先行者学习网
hjpHTML5中文学习网 - HTML5先行者学习网
在第二个惰性方法中if的每个分支都会为ajax()变量赋值,有效覆盖了原有函数,最后一步调用新的函数。下一次调用的ajax()的时候,就直接调用变量。hjpHTML5中文学习网 - HTML5先行者学习网

优化重点hjpHTML5中文学习网 - HTML5先行者学习网

要执行特定代码只有实际调用才执行,而某些JS库一开始就检测浏览器,预先设置好。hjpHTML5中文学习网 - HTML5先行者学习网

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

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助