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