Я сомневаюсь, что побитовая операция особенно медленная в JavaScript. Поскольку такие операции могут отображаться непосредственно на операции с процессором, которые сами по себе довольно эффективны, не представляется какой-либо присущей битовым операциям характеристикой, которая заставила бы их быть неповторимо медленными в javascript .
Редактировать декабрь 2015 : Я исправлен! Причиной снижения производительности, которой страдает Javascript в отношении побитовых операций, является необходимость преобразования из числа с плавающей запятой в int и обратно (поскольку все числовые переменные в Javascript хранятся как значения с плавающей запятой). Спасибо Чэду Шуггинсу за то, что он указал на это.
Тем не менее, как указано в нескольких ответах, существуют различные приложения javascript, которые используют побитовую работу (например, криптография и графика) и которые не особенно медленны ... (см. Silky и Snarfblam на этой странице). Это говорит о том, что, хотя медленнее, чем C / C ++ и другие языки, которые переводят напрямую побитовые операции в одиночные собственные инструкции ЦП, побитовые операции - все это вялое.
Давайте тем не менее развлечем возможность того, что по каким-то конкретным причинам различные исполнители хостов javascript реализовали побитовые операции таким способом, который делает их чрезвычайно медленными, и посмотрим, имеет ли это значение ...
Несмотря на то, что javascript использовался для других целей, наиболее распространенное использование этого языка при предоставлении пользовательских интерфейсов типа услуг .
Кстати, я вовсе не имею в виду это уничижительно; выполнение этих интеллектуальных функций пользовательского интерфейса, а также рассмотрение различных ограничений, налагаемых на язык, а также слабое соблюдение стандартов, требуют и продолжают требовать талантливых хакеров JavaScript.
Дело в том, что в контексте требований к типу интерфейса пользователя необходимость в любых количестве побитовых операций, способных выявить медлительность JavaScript при обработке таких операций, в лучшем случае встречается редко. Следовательно, для типичного использования программисты должны использовать побитовые операции, где и если этот подход хорошо сочетается с общей программой / данными, и они должны делать это без малейшего беспокойства о проблемах производительности. В маловероятном случае узкого места производительности В результате побитового использования всегда можно выполнить рефакторинг, но лучше избегать ранней оптимизации.
Заметным исключением из вышеперечисленного является введение canvas в современные браузеры, мы можем ожидать, что более требовательные графические функции потребуются от хостов javascript, и такие операции могут потребовать в некоторых случаях тяжелых дозы побитовых операций (а также здоровые математические функции). Вполне вероятно, что эти службы в конечном итоге будут поддерживаться с помощью библиотек JavaScript (и даже в конечном итоге в качестве дополнения языков). Для таких библиотек общие умения отрасли будут использованы для определения наиболее эффективных подходов. Кроме того, и , если действительно имеет слабость в производительности javascript с побитовыми операциями, мы получим некоторую помощь, поскольку я предсказываю, что реализации javascript на различных хостах (браузерах) будут изменены для улучшения этой конкретной области. (Это будет следовать типичной схеме развития javascript, которую мы видели на протяжении многих лет.)