2016-01-02 2 views
3

я происхожу из C# и там огромная различались
A:JavaScript переключатель Performance (Integer) против переключателе (String)

var stringVal = "1"; 
switch (stringVal) 
{ 
    case "0" : 
    break; 
    case "1" : 
    break; 
} 

и
B:

var intVal = 1; 
switch (intVal) 
{ 
    case 0 : 
    break; 
    case 1 : 
    break; 
} 

B намного быстрее в C# (причиной того, что String-Switch будет преобразован в if-else-структуру из компилятора).

похоже ли в JavaScript? (Разумеется, есть только номер типа в JS)
И - для удобства чтения - если я хочу использовать его с некоторым перечислением - «эквивалент» в JS (как описано здесь http://stijndewitt.com/2014/01/26/enums-in-javascript/), есть ли вообще улучшение производительности при использовании

var caseEnum = { 
    firstCase : 0, 
    secCase : 1 
} 

var enumVal = caseEnum.secCase ; 
switch (enumVal) 
{ 
    case caseEnum.firstCase : 
    break; 
    case caseEnum.secCase : 
    break; 
} 

?

(я знаю, что я мог бы сделать это с литералов объектов, но ключ-оператор с целочисленными более естественно для меня)

+0

"? Есть ли в JavaScript похож" Зависит от реализации интерпретатора. –

+0

Это, вероятно, * быстрее использовать целые числа, но JIT - загадочная вещь. Если есть сомнения, профиль. – Veedrac

ответ

0

Есть ли в JavaScript похож? (Конечно, есть только номер типа в JS)

В JavaScript выражение может быть практически что угодно, его не любят в C где тип проверяется во время компиляции, здесь его вычисляется во время «выполнения»

Это главное отличие.

Очень подробное объяснение находится в MDN - Switch

... выражение имеет то же значение, в результате ввода выражения
(используя строгое сравнение, ===)


... есть в любом случае производительность улучшение

Это зависит от вашего браузера и его двигателя JS.

+0

Да, но есть ли также коэффициент усиления при использовании переключателя с Integer в javascript? Так ли имеет смысл делать это с помощью Integer? –

+0

Самый быстрый способ - ни один из них. Хэш намного быстрее, чем их всех. | http://davidbcalhoun.com/2010/is-hash-faster-than-switch-in-javascript/ – CodeWizard

2

я сделал немного невероятный уродливую тест на моем собственном
(look at:https://jsfiddle.net/PutziSan/kzdwt8u2)

и запустить код на разных браузерах (результаты ниже), (все браузеры были обновлены на последнюю версию сегодня - 03.01. 2016)

кстати другой намек, что край и IE просто смешно.
Результаты действительно интересны, я думаю.
(я знаю, что это своего рода «тесты» не так точен, но я думаю, что они могут дать подсказку)

кажется, что переключатель с Integer Замечен из составителей, но это не имеет, что большое влияние.

хром:
chrome

светлячок:
firefox

край:
edge

IE:
IE

+0

Действительно полезное и интересное сравнение времени, спасибо! –

Смежные вопросы