Почему const медленнее, чем var?

#javascript #performance #constants #var #variable-declaration

#javascript #Производительность #константы #var #объявление переменной

Вопрос:

Я тестировал различия в производительности между const и var в Javascript, когда заметил, что const это медленнее, чем var .

Я написал скрипт для времени const и var и сравнил их. Он проверяет, const быстрее в 1000 раз. const быстрее только примерно в 13% случаев.

 function executionTime(code) {
  var t0 = performance.now()
  code()
  var t1 = performance.now()
  return t1 - t0
}

function test() {
    
  var results = [0, 0] // one, two - Which one is faster?
    
  for (var i = 0; i < 999; i  ) {
    var one = executionTime(function() {
      const x = 'x'
    })

    var two = executionTime(function() {
      var x = 'x'
    })
        
    if (one > two) {
      results[0]  
    } else {
      results[1]  
    }
  }
    
  return ((results[0] < results[1]) ? 'Const is slower': 'Var is slower')   ' - const was faster '   results[0]   ' times, and var was faster '   results[1]   ' times'
}

console.log(test())  

Итак, мой вопрос в том, почему объявление переменной с var быстрее, чем с const ?

Комментарии:

1. Рассмотрите возможность использования онлайн-инструмента microbenchmark (или даже библиотеки и онлайн-скрипки). 1) Более легко разделяемый / сопоставимый 2) Уменьшает смещение микробенчмарка. Метод синхронизации здесь выглядит ошибочным, учитывая ничего другого.

2. Я запускаю здесь несколько тестов, результат меняется, и он всегда меньше 0,5%, поэтому кажется, что реальной разницы нет jsben.ch

3. Разместите там ссылку на другой код, чтобы я (и другие) могли его запустить — любая разница в производительности является артефактом реализации. Когда я запускал тест, значение const было несущественно ‘быстрее’ (Safari iOS); 100 против 99,8 / 9. Однако, с такими маленькими временными телами и другими накладными расходами, я бы не придавал большого значения результатам.

4. Я ожидаю, что оба ваших кода будут оптимизированы, поскольку они ничего не делают , и вы измеряете что-то еще . Также 1000 запусков слишком мало для прогрева оптимизирующего компилятора.

Ответ №1:

Как только я провел несколько тестов с jsbench, как было предложено в комментариях, я понял, что производительность может варьироваться, и что мой метод синхронизации был ошибочным.

JSBench:https://jsben.ch/eAiAk

Таким образом, нет реальной разницы во времени между const и var .