Производительность условий if-else, switch или map - PullRequest
59 голосов
/ 24 декабря 2011

Мне было интересно узнать о следующих реализациях условных структур в javascript.

Метод 1:

 if(id==="camelCase"){
    window.location.href = "http://www.thecamelcase.com";
}else if (id==="jsFiddle"){
    window.location.href = "http://jsfiddle.net/";
}else if (id==="cricInfo"){
    window.location.href = "http://cricinfo.com/";
}else if (id==="apple"){
    window.location.href = "http://apple.com/";
}else if (id==="yahoo"){
    window.location.href = "http://yahoo.com/";
}           

Метод 2:

switch (id) {
case 'camelCase':
    window.location.href = "http://www.thecamelcase.com";
    break;
case 'jsFiddle':
    window.location.href = "http://www.jsfiddle.net";
    break;
case 'cricInfo':
    window.location.href = "http://www.cricinfo.com";
    break;
case 'apple':
    window.location.href = "http://www.apple.com";
    break;
case 'yahoo':
    window.location.href = "http://www.yahoo.com";
    break;

}

Метод 3

var hrefMap = {
camelCase : "http://www.thecamelcase.com",
jsFiddle: "http://www.jsfiddle.net",
cricInfo: "http://www.cricinfo.com",
apple: "http://www.apple.com",
yahoo: "http://www.yahoo.com"
};
window.location.href = hrefMap[id];

Метод 4

window.location.href = {
    camelCase : "http://www.thecamelcase.com",
    jsFiddle: "http://www.jsfiddle.net",
    cricInfo: "http://www.cricinfo.com",
    apple: "http://www.apple.com",
    yahoo: "http://www.yahoo.com"
}[id];

Вероятно, методы 3 и 4 могут иметь почти одинаковую производительность, но только для подтверждения.

Ответы [ 3 ]

61 голосов
/ 24 декабря 2011

Согласно этому тесту JSBen.ch , установка switch является самой быстрой из представленных методов (Firefox 8.0 и Chromium 15).

Методы 3 и 4 немного менее быстры, но это едва заметно. Очевидно, что метод if-elseif значительно медленнее (FireFox 8.0).

Тот же тест в Chromium 15 не показывает существенных различий в производительности между этими методами. На самом деле, метод if-elseif кажется самым быстрым в Chrome.

Обновление

Я снова выполнил тесты , с 10 дополнительными записями. Hrefmap (методы 3 и 4) показывают лучшую производительность.

Если вы хотите реализовать метод сравнения в функции, метод 3 определенно победит: сохраните карту в переменной и обратитесь к этой переменной позже, вместо того, чтобы восстанавливать ее.

16 голосов
/ 24 декабря 2011

Вы всегда можете сделать jsPerf тестирование самостоятельно.Однако в общем случае справочная таблица - это самый быстрый способ доступа к данным.Это будет (3) в ваших фрагментах.Кроме того, switch/case почти всегда быстрее, чем if-else.Таким образом, порядок для вашего примера будет

(3) -> (4) -> (2) -> (1)

0 голосов
/ 27 августа 2013

Просто подумал, что добавлю это как возможное соображение. Я наткнулся на это исследование этого вопроса ... http://davidbcalhoun.com/2010/is-hash-faster-than-switch-in-javascript

Принимает во внимание различные движки и браузеры.

...