Я использую switch-case
заявления на регулярной основе в ECMAscript. Помимо моего личного одобрения, есть тонны специальной литературы, о производительности на этом языке в целом и около условных утверждений.Характеристики коммутационного футляра в ECMAscript
Один хороший пример, который я помню, например, отличная книга «Высокопроизводительный Javascript» Николая Закаса. Как и во многих других книгах и статьях, говорится, что оператор switch-case
всегда быстрее, чем if (else)
, если вы используете более два условных чехла.
В любом C-подобный язык я знаю, switch-case
заявление не что иное, как бинарного-хэш-карте, которая, с разбивкой снова, это цепь СПМ кодов в сборке. Хорошее чтение here
Однако после этого предисловия:
Я имел обсуждение использования функций обработчиков событий с моей командой, и как мы будем иметь дело с типами событий. Будем ли мы использовать явную функцию для любого события, или если мы должны использовать одну функцию big, которая обрабатывает несколько типов событий . В рамках этой дискуссии, вопрос производительности разработан и мы создали очень простой, простой JSPerf:
http://jsperf.com/engine-context-data-caching-test/3
И я был в значительной степени потрясен результатами и тем, что я видел. Веруя в эти тестовые случаи, заказ от case statements
имеет решающее значение при выполнении исполнения. Разница между long
и longSlow
есть, только позиция в заявлении case 'baz'
в заявлении switch
. Это действительно и разумно?
Есть ли какой-нибудь шанс что-то пропустить? Во-первых, я хорошо подумал, может быть, его недостаточно case
, а интерпретатор просто создаст условия под капотом, поэтому я увеличил число без каких-либо изменений в результатах.
Я просто отказываюсь верить, что ECMAScript двигателей как V8 и SpiderMonkey, до сих пор не оптимизировать эту проблему.
Ваш ответ приветствуется, но он вообще не отвечает на вопрос. Вы должны перечитать вопрос и, возможно, дать исчерпывающий ответ :) –