代码之家  ›  专栏  ›  技术社区  ›  sje397

严格模式更有效吗?

  •  64
  • sje397  · 技术社区  · 15 年前

    一般来说,在浏览器中以“严格模式”执行javascript会提高性能吗?是否有任何主要的浏览器做额外的优化或使用任何其他技术,将提高严格模式下的性能?

    简单地说,strict模式的其他目标之一是允许浏览器引入额外的优化或其他性能增强吗?

    4 回复  |  直到 10 年前
        1
  •  28
  •   Jeff Walden    14 年前

    strict mode的其他目标之一是允许浏览器引入额外的优化或其他性能增强吗?

    不管是不是 要做到这一点,我不确定,尽管我认为答案是肯定的。

        2
  •  22
  •   Christian C. Salvadó    15 年前

    这个 严格模式 不是关于性能,而是 strict variant 主要目标 是为了避免被认为是 容易出错的功能 .

    更安全的 ,引入了大量的语义变化,还进行了额外的错误检查,错误是有噪声的,在非严格的代码中事情只能默默地失败。

    严格 是非常灵活的,你可以混合非严格和严格的代码。

        3
  •  14
  •   intrepidis    10 年前

    快25%。

    <div id="a">
      Q
    </div>
    <div id="b">
      Q
    </div>
    <script>
      Benchmark.prototype.setup = function() {
        function d(i) {
          var x = '999';
          y = eval("y = 8;");
          var z = x + y + i;
          document.getElementById('a').innerHTML = z;
        }
    
        function c(i) {
          'use strict'
          var x = '999';
          var y = eval("y = 8;");
          var z = x + y + i;
          document.getElementById('b').innerHTML = z;
        }
      };
    </script>
    

    可以在此处进行测试: http://jsperf.com/strict-mode


    <script>
      Benchmark.prototype.setup = function() {
        var nonstrict = (function() {
            return function (arg1) {
                var index;
                for (index = 1; index < arguments.length; ++index) {
                    arguments[0] += arguments[index];
                }
                return arguments[0] - arg1;
            };
        }());
        var strict = (function() {
            "use strict";
            return function (arg1) {
                var index;
                for (index = 1; index < arguments.length; ++index) {
                    arguments[0] += arguments[index];
                }
                return arguments[0] - arg1;
            };
        }());
        var result;
      };
    </script>
    

    以下是jsPerf测试: http://jsperf.com/strict-mode-arguments

        4
  •  4
  •   Dave    14 年前

    在大多数情况下, . 如果仔细检查ECMAScript 5标准文档,您会注意到几乎所有在伪代码算法中出现的Strict模式都相当于:

      if (isStrictMode) {
          //throw an (early) SyntaxError or TypeError
      }
      else {
          //return
      }
    

    1. 严格模式的检查在ECMAScript 3中并不存在,虽然它相对轻量级,但与ECMAScript 3的对等实现相比,一致的JavaScript实现现在至少运行一个额外的条件检查。是的…我知道像这样的一张支票只会消耗很少的时钟周期,但是一些小事情会累加起来
    2. 因为严格模式主要是JavaScript的一个解析时特性,所以当对某些网站(例如SunSpider)启用严格模式时,您最喜欢的浏览器不会显示太多性能下降。也就是说,性能会下降 代码被执行意味着 能够 日期 对象来度量块执行时间