惰性载入函数

惰性载入函数(跨浏览器兼容模式初次加载优化)

由于浏览器之间的行为差异,大多数js代码包含了大量if语句,比如下面跨浏览器事件对象绑定事件的代码片段:

var EventUtil = {
    addHandler: function(element,type,handler){   //绑定事件
         if(element.addEventlistener){
              element.addEventlistener(type , handler , false)
          }else if(element.attachEvent){
              element.attachEvent("on" + type , handler)
          }else{
              element["on" + type] =  handler
         }
         },
     .....
}
  • 每次执行绑定事件调用EventUtil.addHandler(),都会经过多次的判断。
  • 要知道,哪怕只有一个if语句,都比没有好呀!!!

第一种惰性加载解决方案:函数覆盖

function addHandler(element,type,handler){   //绑定事件
  if(element.addEventlistener){
        addHandler = function(){  
            element.addEventlistener(type, handler, false);
        }
    }else if(element.attachEvent){
        addHandler = function(){   
             element.attachEvent("on" + type, handler);
         }
    }else{
        addHandler = function(){ 
              element["on" + type] =  handler;
         }
     }
      return  addHandler(element,type,handler);
   }

  • 首先,在惰性载入中,if语句的每一个分支都会为addHandler变量赋值,有效的覆盖了原有函数。
  • 最后就是执行新赋的函数了,

第二种惰性加载解决方案:匿名自执行

var addHandler = (function(){  
  if(element.addEventlistener){
        return function(type, handler, false){  
            element.addEventlistener(type, handler, false);
         }
    }else if(element.attachEvent){
        return function(type, handler, false){   
             element.attachEvent("on" + type, handler);
         }
    }else{
         return function(type, handler, false){ 
              element["on" + type] =  handler;
         }
     }
   })()
  • 创建匿名自执行的函数,确定使用哪一个函数实现浏览器绑定需求。
  • 惰性载入函数的优点是指在执行分支代码时牺牲一点性能,避免执行不必要的代码。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 因为浏览器之间行为的差异,多数JavaScript 代码包含了大量的if 语句,将执行引导到正确的代码中。看看下面...
    Daniel_Y阅读 2,994评论 0 1
  • 惰性载入函数表示函数执行的分支仅会发生一次,有两种实现惰性载入函数的方式,第一种是在函数被调用时再处理,在第一次调...
    紫痕蓝羽阅读 1,729评论 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,977评论 1 45
  • 因浏览器行为差异,有事 JS 代码包含大量的 if 语句,一个函数如果包含大量 if 判断,而且每次调用的时候都做...
    Autumn_a阅读 1,560评论 0 0
  • 昨天我给老爸抱怨说“弟弟对学习上的事不上心”。老爸忽然来了句,不然问问他有什么理想好了。 虽然我真的有被老爸的话喷...
    栗子_a133阅读 3,395评论 0 4