优化JavaScript 之执行时间


JavaScript 是解释性的语言,他的执行速度要大大慢于编译性语言。
JavaScript 比编译型的 C 慢 5000 倍;
           比解释型的 Java 慢 100 倍;
           比解释型的 Perl 慢 10 倍;
           不过我们可以坐一些简单的事情来提高 JavaScript代码的性能。
           1.关注范围
           范围可以被认为是某个变量的存在空间。浏览器的 JavaScript 的默认的范围(全局)是 window。在window范围中创建的变量只在页面从浏览器中卸载后才
会销毁。而你定义的每个函数都是在全局范围下的另一个范围中。在函数中创建的所有变量都只存在于函数范围内,函数执行完毕时就销毁。
            可以认为JavaScript 的范围是一个树状层次。引用变量时, JavaScript 解释程序先在最近的范围内查找其是否存在。如果没有,就到上一层次中查找,如此
进行,直到 window 范围。如果在 window 范围内也没有发现变量,则报告错误。

            每次解释程序到另一个范围内搜索变量,都会影响执行速度。本地范围内的变量比全局变量执行起来更快。解释程序在树中要走的距离越短,脚本运行地越快。
            考虑如下例子:
            var sMyF = "Nicholas";
           
            function fn1(){
                alert(sMyF);
            }
            function fn2(){
                var sMyM = "Zakas";
                fn1();
            }
            function fn3(){
                var sMyL = "C";
                fn2();
            }
           
            fn3();
            调用最后一行的 fn3() 时,创建了如下的范围树:
            (window)
                |
                |
                |------MyF = "Nicholas"
                |
                |
                |------fn3()
                        |
                        |
                        |------MyM = "Zakas"
                        |
                        |
                        |-------fn2()
                                  |
                                  |
                                  |-------MyL = "C"
                                  |
                                  |
                                  |--------fn1()
            函数fn3()调用fn2(),而fn2()调用了fn1()。函数fn1()又访问了window级别的变量 sMyF,为定位这个变量,解释程序必须不断向上查找整个范围树,直到window范围。这花费了很多时间。所以必须找一个优化执行速度的方法。
            (1)使用局部变量
            在函数中,总是使用var 语句来定义变量。无论何时使用var,都会在当前的范围内创建一个局部变量。如果直接使用这个变量而不事先用var进行声明,则变量会创建在window范围内,也就说每次使用这个变量,解释程序都要搜索整个范围树。
            例如,不推荐这种方法。
            function sayFirstName(){
                aMyF = "Nicholas";        //    没有使用 var 声明
                alert(aMyF);
            }
            在这个函数中,对变量 aMyF的赋值没有使用var;变量就被创建在了window 范围内。   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值