8

純粋な JavaScript では、MDNGoogle JavaScript スタイル ガイドは、以下の 2 つのスニペットが同等であることを示唆しています。

// Snippet one
var myObject = {
  "test":"test"
}

// Snippet two
var myObject = {
  test:"test"
}

performance.now()( MDN ) を使用して、100 万個の単純なオブジェクトを作成するのにかかる時間を測定するテスト関数を作成しました。

function test(iterations) {
  var withQuotes = [];
  var withoutQuotes = [];

  function testQuotes() {
      var objects = [];
      var startTime, endTime, elapsedTimeWithQuotes, elapsedTimeWithoutQuotes;

      // With quotes
      startTime = window.performance.now();

      for (var i = 0; i < 1000000; i++) {
          objects[objects.length] = {
              "test": "test"
          };
      }

      endTime = window.performance.now();
      elapsedTimeWithQuotes = endTime - startTime;

      // reset
      objects = undefined;
      startTime = undefined;
      endTime = undefined;
      objects = [];

      // Without quotes
      startTime = window.performance.now();

      for (var i = 0; i < 1000000; i++) {
          objects[objects.length] = {
              test: "test"
          };
      }

      endTime = window.performance.now();
      elapsedTimeWithoutQuotes = endTime - startTime;

      return {
          withQuotes: elapsedTimeWithQuotes,
          withoutQuotes: elapsedTimeWithoutQuotes
      };
    }

  for (var y = 0; y < iterations; y++) {
      var result = testQuotes();
      withQuotes[withQuotes.length] = result.withQuotes;
      withoutQuotes[withoutQuotes.length] = result.withoutQuotes;

      console.log("Iteration ", y);
      console.log("With quotes: ", result.withQuotes);
      console.log("Without quotes: ", result.withoutQuotes);
  }

  console.log("\n\n==========================\n\n");
  console.log("With quotes average: ", (eval(withQuotes.join("+")) / withQuotes.length));
  console.log("Without quotes average: ", (eval(withoutQuotes.join("+")) / withoutQuotes.length));
}

test(300);

私が得た結果は、引用符を使用する方が (わずかに) 高速であることを示しています。これはなぜでしょうか?

私のブラウザでは、テスト関数から次の結果が得られます (平均 300 回以上の反復)。

引用符あり: 167.6750966666926ms
引用符なし: 187.5536800000494ms

もちろん、私のテスト関数もダフである可能性は十分にあります...

私のブラウザ: Chrome 29.0.1547.65

4

1 に答える 1

4

ブラウザによると思います。性能はほぼ同等です。 http://jsperf.com/objectquotes

于 2013-09-13T06:26:53.207 に答える