zoukankan      html  css  js  c++  java
  • 加速IE的Javascript的方法

    将下列代码加在JavaScript的最前面
    /*@cc_on _d=document;eval(’var document=_d’)@*/

    加入这样的一行代码IE的document的访问速度至少可以提高5倍以上
    下面是加入前和加入后的测试比较代码
    // Before
    var date = new Date;
    for (var i = 0; i < 100000; i++) document;
    alert(new Date - date); // 643

    /*@cc_on _d=document;eval(’var document=_d’)@*/

    // After
    date = new Date;
    for (var i = 0; i < 100000; i++) document;
    alert(new Date - date); // 145

    速度提高了不少吧!

    解说:
    首先,IE里document就这样直接被调用的话被执行的是window 对象的内部函数,而这个比较低效的。根据这一点,下面的处理可以提高速度:
    var doc = document;

    document; // 慢
    doc; // 这个比上面的(document)快

    虽然像上面那么写可以直接使用,但是之前用到document的地方都要去替换,这个有点麻烦了点吧。所以,看下面的:
    var doc = document;
    var document = doc;
    可以实现的话那就太好了……

    了解JavaScript的人应该知道,JavaScript的变量是在最开始的时候就生成的,所以这里的document就变成了undefined了。
    没关系,继续改进~
    var doc = document;
    eval(’var document = doc’);

    eval的作用就是在作用域范围内改变变量,这样的话,后面的document就可以被正常使用了。
    最后,加上只有在IE内有效的条件,就像下面这样就可以了~
    /*@cc_on
    var doc = document;
    eval(’var document = doc’);
    @*/

    举一反三,像下面这样的写法,document以外的全局变量也可以用上面的方法,起到加速的作用。
    /*@cc_on
    eval((function(props) {
    var code = [];
    for (var i = 0 l = props.length;i<l;i++){
    var prop = props[i];
    window[’_'+prop]=window[prop];
    code.push(prop+’=_’+prop)
    }
    return ‘var ‘+code.join(’,');
    })(’document self top parent alert setInterval clearInterval
    setTimeout clearTimeout’.split(’ ‘)));
    @*/

    转载:http://purpen.javaeye.com/?page=8&show_full=true

  • 相关阅读:
    Promise推荐
    ES6推荐
    vue学习笔记之项目创建流程
    vue学习笔记之环境搭建
    前端知识小总结3
    前端知识小总结2
    JavaScript语言精粹の笔记
    JavaScript修炼之道の笔记
    移动端及vue相关问题
    组件式开发Web App
  • 原文地址:https://www.cnblogs.com/xiaopin/p/1892692.html
Copyright © 2011-2022 走看看