Nice programing

엄격 모드가 더 성능이 좋습니까?

nicepro 2020. 11. 15. 11:47
반응형

엄격 모드가 더 성능이 좋습니까?


'엄격 모드'에서 브라우저 내에서 자바 스크립트를 실행하면 일반적으로 성능이 향상됩니까? 주요 브라우저가 추가 최적화를 수행하거나 엄격 모드에서 성능을 향상시키는 다른 기술을 사용합니까?

약간 다시 말하면, 엄격 모드는 다른 목표 중에서 브라우저가 추가 최적화 또는 기타 성능 향상을 도입 할 수 있도록 의도 된 것입니까?


Strict 모드는 다른 목표 중에서도 브라우저가 추가 최적화 또는 기타 성능 향상을 도입 할 수 있도록 의도 된 것입니까?

이것이 의도 된 것인지 아닌지는 확실하지 않지만 대답은 '예'라고 생각합니다.

하지만 Strict 모드는 이러한 기회를 제공하고 브라우저는 이러한 기회를 제공하는 것이 ECMA위원회의 의도적 인 목표인지 여부에 관계없이이를 구현할 것이라고 확신 할 수 있습니다. 그러나 이러한 모든 기회가 즉시 취해질 것이라고는 생각하지 않습니다. 많은 경우에 엄격 모드가 현재 널리 사용되지 않기 때문에 만트라는 정확성이 먼저이고 성능이 나중에 수행 될 가능성이 높습니다. (저는 Mozilla의 JavaScript 엔진에서 작업하고 Strict 모드의 다양한 부분을 구현했으며 일반적인 규칙으로 이러한 방식으로 구현하고 있습니다. 시도하면 예외를 한두 가지 생각할 수 있습니다.)


엄격 모드는 그것은 정말 성능에 대해없는 엄격한 변형 언어, 그것의 주요 목표 로 간주되는 것을 방지하는 것입니다 오류가 발생하기 쉬운 기능 .

기본적으로 그 목표는 언어를 더 안전하게 만드는 것입니다 . 많은 의미 변경 사항을 도입하고 추가 오류 검사가 수행되고 오류가 시끄 럽습니다. 엄격하지 않은 코드에서는 조용히 실패합니다.

성능에 관해서는 브라우저 벤더가 이제 엄격 모드를 구현하는 데 어려움을 겪고 있다고 생각합니다. 문제는 JS 엔진이 대부분 ECMAScript 3을 기반으로하고 엄격함 의 범위 가 매우 유연 하기 때문에 엄격 모드를 구현하는 것이 쉽지 않다는 것입니다 . 엄격하지 않은 코드와 엄격한 코드를 혼합 할 수 있습니다.

또한보십시오:


이 테스트에 따르면 "엄격 모드" 약 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에서 테스트 할 수 있습니다.


흥미롭게도 "엄격 모드"에서는 인수 배열의 조작이 약 6 배 더 빠를 수 있습니다!

<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


대부분의 경우, 전혀 . ECMAScript 5 표준 문서를 면밀히 살펴보면 의사 코드 알고리즘에서 발생하는 Strict Mode의 거의 모든 항목이 다음과 같음을 알 수 있습니다.

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

이에 대해주의해야 할 두 가지 사항이 있습니다.

  1. The checks on Strict Mode didn't exist in ECMAScript 3. While it's relatively lightweight, conforming implementations of JavaScript are now running at least one extra conditional check compared to their ECMAScript 3 counterparts. Yeah...I know a single check like this burns very few clock cycles, but little things add up
  2. Because Strict Mode is primarily a parse time feature of JavaScript, your favorite browser isn't going to show much of a performance decrease when Strict Mode is enabled for some website (e.g., SunSpider). That is, the performance degrade occurs before code is executed meaning it could be perceptible to end-users but is largely immeasurable using the Date object to measure block execution time

참고URL : https://stackoverflow.com/questions/3145966/is-strict-mode-more-performant

반응형