Какой метод быстрее или быстрее реагирует на javascript, if/else или тернарный оператор? Предпочтительно ли использовать одно или другое, и если да, то по каким причинам?
Javascript, если /else или тройной оператор быстрее?
Ответ 1
Разница в скорости будет незначительной - используйте то, что вы считаете более читаемым. Другими словами, я очень сомневаюсь, что узкое место в вашем коде будет связано с использованием неправильной условной конструкции.
Ответ 2
Кажется, что никто не делал никакого фактического профилирования. Вот код, который я использовал:
test = function() {
for (var i = 0; i < 10000000; i++) {
var a = i < 100 ? 1 : 2;
/*
if(i < 100) {
var a = 1;
}else{
var a = 2;
}
*/
}
}
test();
Использование блока if
/else
вместо тернарного оператора дает увеличение производительности 1,5 - 2x в Google Chrome v21 под OS X Snow Leopard.
В качестве одного из примеров, когда это очень важно, синтезирование звука в реальном времени становится все более распространенным с JavaScript. Этот тип разницы в производительности - большое дело, когда алгоритм работает 44100 раз в секунду.
Ответ 3
Я не думал, что тест @charlie robert был честным.
Здесь мой jsperf
результат:
- строгое равное - это самый быстрый
- строгий тернар на 33% медленнее
- правдивый фальшив на 49% медленнее
- тернарный правдивый фальшив на 55% медленнее
- если else и trernary примерно одинаковы.
нормальный равный и нормальный троичный самый медленный.
strict равно:
var a = true, b;
if (a === true) {
b = true;
} else {
b = false
}
if (a === false) {
b = true;
} else {
b = false;
}
тернарный строгий равен
var a = true, b;
b = (a === true) ? true : false;
b = (a === false) ? true : false;
простое равенство
var a = true, b;
if (a == true) {
b = true;
} else {
b = false;
}
if (a == false) {
b = true;
} else {
b = false;
}
простое трехмерное равенство
var a = true, b;
b = (a == true) ? true : false;
b = (a == false) ? true : false;
правша/фальшивость
var a = true, b;
if (a) {
b = true;
} else {
b = false;
}
if (!a) {
b = true;
} else {
b = false;
}
тернарная правда/фальшивость
var a = true, b;
b = (a) ? true : false;
b = (!a) ? true : false;
Ответ 4
чтобы ответить charlie roberts выше, я бы добавил:
следующая ссылка дает некоторые острые ответы; результат для переключателей в Firefox наиболее поразителен: http://jsperf.com/if-else-vs-arrays-vs-switch-vs-ternary/39
Те, кто задает вопрос, почему кто-то будет исследовать оптимизацию в этой степени, будут полезны для исследования WebGL!
Ответ 5
Тернарный оператор - это только синтаксический сахар, а не усилитель производительности.
Ответ 6
Нет никакой разницы в скорости.
Некоторые предпочитают if/else для удобочитаемости. Лично я использую тернарный оператор всякий раз, когда логика достаточно тривиальна для понимания на одной строке.