JavaScript AJAX之惰性载入函数


Posted in Javascript onAugust 27, 2014

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

普通Ajax方法

/**

 * JS惰性函数

 */

 

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";  

    }

}

每次调用ajax()函数都要对浏览器内置的XHR检查,效率不高。

使用惰性方式的方法

/**

 * JS惰性函数

 */

 

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();

}

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

优化重点

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

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

Javascript 相关文章推荐
了解Javascript的模块化开发
Mar 02 Javascript
javascript中this的四种用法
May 11 Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 Javascript
js中substring和substr两者区别和使用方法
Nov 09 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
jQuery实现只允许输入数字和小数点的方法
Mar 02 Javascript
Javascript实现鼠标框选操作  不是点击选取
Apr 14 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
Dec 27 Javascript
flexslider.js实现移动端轮播
Feb 05 Javascript
JS基于递归实现网页版计算器的方法分析
Dec 20 Javascript
jQuery实现手风琴效果(蒙版)
Jan 11 jQuery
vue 组件基础知识总结
Jan 26 Vue.js
IE浏览器不支持getElementsByClassName的解决方法
Aug 27 #Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
Aug 27 #Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 #Javascript
JavaScript中switch判断容易犯错的一个细节
Aug 27 #Javascript
JavaScript中使用arguments获得函数传参个数实例
Aug 27 #Javascript
JavaScript中输出标签的方法
Aug 27 #Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
Aug 27 #Javascript
You might like
使用Apache的rewrite技术
2006/06/22 PHP
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
求职信的最佳写作思路
2014/02/01 职场文书
法制宣传标语
2014/06/23 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
利用Python实时获取steam特惠游戏数据
2022/06/25 Python