2013-04-25 3 views
7

Я использую 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, до сих пор не оптимизировать эту проблему.

ответ

4

Я ссылается этот источник: http://oreilly.com/server-administration/excerpts/even-faster-websites/writing-efficient-javascript.html#sect2

Используйте, если заявление, когда:

  • Там нет более двух дискретных значений, для которых необходимо проверить.

  • Существует большое количество значений, которые можно легко разделить на диапазоны.

Используйте оператор переключателя, когда:

  • Есть более двух, но менее 10 дискретных значений, для которых требуется проверить.

  • Для условий нет диапазонов, поскольку значения нелинейны.

Используйте поиск массива, когда:

  • Есть более 10 значений, для которых необходимо проверить.

  • Результаты условий - это одиночные значения, а не ряд действий, которые необходимо предпринять.

+3

Ваш ответ приветствуется, но он вообще не отвечает на вопрос. Вы должны перечитать вопрос и, возможно, дать исчерпывающий ответ :) –

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