美文网首页
函数惰性载入来提升性能

函数惰性载入来提升性能

作者: 42码的鞋 | 来源:发表于2018-01-03 16:18 被阅读39次

以下对各个浏览器事件绑定兼容的代码应该算是特别熟悉了,今天无意中看到了对这段代码的优化,感觉很有意义,便记录下来,方便查找。

思考:每次执行是不是都要判断分支?怎么可以仅执行一次呢?

function addEvent (type, element, fun) {
    if (element.addEventListener) {
        element.addEventListener(type, fun, false);
    }
    else if(element.attachEvent){
        element.attachEvent('on' + type, fun);
    }
    else{
        element['on' + type] = fun;
    }
}

惰性载入(一)

所谓惰性载入,就是说函数的if分支只会执行一次,之后调用函数时,直接进入所支持的分支代码。

function addEvent (type, element, fun) {
    if (element.addEventListener) {
        addEvent = function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if(element.attachEvent){
        addEvent = function (type, element, fun) {
            element.attachEvent('on' + type, fun);
        }
    }
    else{
        addEvent = function (type, element, fun) {
            element['on' + type] = fun;
        }
    }
    return addEvent(type, element, fun);
}

在这个惰性载入的 addEvent() 中,if 语句的每个分支都会为 addEvent 变量赋值,有效覆盖了原函数。 最后一步便是调用了新赋函数。下一次调用 addEvent() 的时候,便会直接调用新赋值的函数,这样就不用再执行 if 语句了。

惰性载入(二)

var addEvent = (function () {
    if (document.addEventListener) {
        return function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if (document.attachEvent) {
        return function (type, element, fun) {
            element.attachEvent('on' + type, fun);
        }
    }
    else {
        return function (type, element, fun) {
            element['on' + type] = fun;
        }
    }
})();

在这个惰性载入的 addEvent() 中,主要是通过 立即执行函数IIFE 来实现的。这样也可以避免代码重复检测 if 语句的各个条件分支。

原文地址

相关文章

  • 函数惰性载入来提升性能

    以下对各个浏览器事件绑定兼容的代码应该算是特别熟悉了,今天无意中看到了对这段代码的优化,感觉很有意义,便记录下来,...

  • 惰性载入函数

    因为浏览器之间行为的差异,多数JavaScript 代码包含了大量的if 语句,将执行引导到正确的代码中。看看下面...

  • 惰性载入函数

    以添加事件函数为例,有时需要通过 if 判断浏览器,进而决定如何调用添加事件函数。实际上对于同一个浏览器,在使用过...

  • 惰性载入函数

    思路: 方式一:第一次执行条件判断以后,覆盖原函数。(缺点,损失第一次的性能) 方式二:在声明函数时就指定适当的函...

  • 惰性载入函数

    惰性载入函数(跨浏览器兼容模式初次加载优化) 由于浏览器之间的行为差异,大多数js代码包含了大量if语句,比如下面...

  • javaScript性能优化之代码优化

    利用函数的惰性载入提高 javaScript 代码性能 在 javaScript 代码中,因为各浏览器之间的行为的...

  • 解析JavaScript惰性载入函数

    惰性载入函数表示函数执行的分支仅会发生一次,有两种实现惰性载入函数的方式,第一种是在函数被调用时再处理,在第一次调...

  • 解析JavaScript惰性载入函数

    惰性载入函数表示函数执行的分支仅会发生一次,有两种实现惰性载入函数的方式,第一种是在函数被调用时再处理,在第一次调...

  • JS高级函数

    高级函数 在 JavaScript 中使用函数的高级方法。 数据类型的安全检测 构造函数的安全作用域 惰性载入函数...

  • JavaScript函数编程中的一些值得学习的技术

    纯函数, 高阶函数,函数组合,函数柯里化,偏函数,惰性载入函数,缓存函数这些概念在函数编程中真的是太常见了,尤其是...

网友评论

      本文标题:函数惰性载入来提升性能

      本文链接:https://www.haomeiwen.com/subject/wwghnxtx.html