#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
.