Условное ветвление. Технологии будущего. Оптимизация структуры веб-страниц
Выбор в зависимости от строки
Точное соответствие и хэши
Итоговая таблица
Начнем с наиболее очевидной составляющей любой логики: ветвления. В любом алгоритме встречается место, в котором нужно выбрать то или иное продолжение в зависимости от проверяемого условия. Давайте рассмотрим следующие простые примеры проверки. В первом случае у нас три простых вложенных проверки:
var a = 1,
b = 2,
c = 3;
if(a == 1) {
if (b == 2) {
if (c == 3) {
...
}
}
}
Это, что самое интересное, работает так же быстро, как и совмещенный if:
if(a == 1 && b == 2 && c == 3){
...
}
Однако последний вариант немного меньше по размеру. Если не стоит задача минимального размера кода, то для улучшения читаемости стоит использовать первый вариант. Если же мы минимизируем все, то можно рассмотреть возможность использования if-then-else выражения. Но нужно иметь в виду, что производительность таких конструкций:
var v = a == 1 ? b == 2 ? c == 3 ? 1 : 0 : 0 : 0;
примерно на 10-50% меньше, чем у обычного ветвления, рассмотренного чуть выше.
В том случае, когда все переменные у нас числовые, то проверка равенства их суммы заданной будет выполняться на 5–10% быстрее:
if (a + b + c == 6) {
...
}
Если же нам нужно проверить просто существование переменных и их неотрицательность (т.е. то, что переменные не undefined, не NaN, не null, не '' и не 0), то следующий вариант будет работать еще на 5–10% быстрее, чем предыдущий случай (и на 10–20% быстрее, чем самый первый пример):
if (a && b && c) {
...
}
Очень часто нам нужно проверить что-то сложнее, чем просто число. Например, совпадение строки с заданной, или равенство объектов. В этом случае нам просто необходимо следующее сравнение:
var a = 1,
b = 2,
c = '3';
if (a == 1 && b == 2 && c === '3') {
...
}
Здесь мы используем сравнение без приведения типов ===, которое в случае нечисловых переменных работает быстрее обычного сравнения на 10–20%.