Производительность побитовых операторов в JavaScript

Я не могу сказать достаточно хороших вещей приблизительно Asciidoc. Это имеет очень простой синтаксис разметки, может генерировать все от PDF до roff, портативного для реализации и очень легко вставленный в любую Wiki только с несколькими незначительными изменениями.

Даже в его состоянии разметки, его очень, очень легкий читать. Единственной вещью, с которой я должен играть при использовании его, являются таблицы, но это не слишком трудно.

, Если Вы сохраняете файлы в текстовом формате в своем репозитории, отслеживание пересмотра довольно просто.

Для документации кода, я использую doxygen.

19
задан Community 23 May 2017 в 12:34
поделиться

11 ответов

Когда вы хотите их использовать? Вы можете использовать их, когда хотите выполнять побитовые операции. Точно так же, как вы использовали бы логические операторы для выполнения логических операций и математические операторы для выполнения математических операций.

Если вы хорошо знакомы с побитовыми операторами, их вполне естественно использовать в некоторых приложениях. Их можно использовать для многих целей, кроме переоптимизированного логического массива. Конечно, эти обстоятельства не очень часто возникают при программировании на Javascript, но это не причина, по которой операторы не должны быть доступны.

8
ответ дан 30 November 2019 в 02:10
поделиться

Никто больше не использует шестнадцатеричный код?

function hextoRgb(c) {
    c = '0x' + c.substring(1);
    return [(c >> 16) & 255, (c >> 8) & 255, c & 255]; 
}

var c1 = hextoRgb('#191970');
alert('rgb(' + c1.join(',') + ')');
15
ответ дан 30 November 2019 в 02:10
поделиться

Я использую побитовый сдвиг нуля в JS для выполнения быстрого целочисленного усечения:

var i=3.141532;
var iTrunc=i>>0; //3
8
ответ дан 30 November 2019 в 02:10
поделиться

Существует эмулятор NES , написанный на JavaScript - кажется, он много использует побитовые операции.

4
ответ дан 30 November 2019 в 02:10
поделиться

Я нашел полезную информацию @ http://dreaminginjavascript.wordpress.com/2009/02/09/bitwise-byte-foolish/

Судя по всему, в наши дни они работают очень хорошо. Зачем вам их использовать? По той же причине, что и где-нибудь еще.

5
ответ дан 30 November 2019 в 02:10
поделиться

Я думаю, что разработчик должен сделать оператор эффективным или неэффективным. Например, нет ничего, что мешало бы разработчику JavaScript создать виртуальную машину JITting, которая превращает поразрядную операцию в 1 машинную инструкцию. Так что нет ничего по своей сути в «побитовых операторах в JavaScript».

2
ответ дан 30 November 2019 в 02:10
поделиться

Люди делают интересные вещи в JavaScript.

Например, в нем реализовано множество криптографических алгоритмов (по разным причинам); поэтому, конечно, используются побитовые операторы.

1
ответ дан 30 November 2019 в 02:10
поделиться

Используя JavaScript в его инкарнации JScript хоста сценариев Windows, у вас может быть причина использовать побитовые операторы для выбора флагов в значениях, возвращаемых из вызовов WMI или Active Directory. Например, значение User Access для записи пользователя в AD содержит несколько флагов, упакованных в одно длинное целое число.

ADS_UF_ACCOUNTDISABLE = 0x00000002;

if (uac & ADS_UF_ACCOUNTDISABLE == ADS_UF_ACCOUNTDISABLE) {
  // user account has been disabled
}

Или чья-то произвольная структура таблицы может содержать такое поле, доступное через ADO с помощью JScript.

Или вы можете захотеть преобразовать некоторые извлеченные данные в двоичное представление на любой платформе только потому, что:

BinaryData = "L";
BinaryString = BinToStr(BinaryData, ".", "x");

// BinaryString => '.x..xx..'

Таким образом, существует множество причин, по которым можно захотеть выполнить манипуляции с битами в JavaScript. Что касается производительности, единственный способ узнать это - написать и протестировать. Я подозреваю, что в большинстве случаев это было бы вполне приемлемо, не намного хуже, чем любой другой из множества недостатков, содержащихся в этих системах.

1
ответ дан 30 November 2019 в 02:10
поделиться

Когда скорость имеет первостепенное значение, вы можете использовать их для побитового маскирования: http://snook.ca/archives/javascript/storing_values/

Также, если вам нужно поддержки Netscape 4, вы бы использовали их для работы с Document.captureEvents (). Не то чтобы какая-либо респектабельная компания попросила вас написать JS для NS4 ...

0
ответ дан 30 November 2019 в 02:10
поделиться

Я сомневаюсь, что побитовые операции особенно медленны в javascript. Поскольку такие операции могут напрямую отображаться на операции ЦП, которые сами по себе достаточно эффективны, , похоже, нет какой-либо присущей побитовым операциям характеристики, которая заставила бы их работать непоправимо медленно в javascript .
Править Декабрь 2015 года : Я поправляюсь! Падение производительности, которое испытывает Javascript в отношении побитовых операций, происходит из-за необходимости преобразования из числа с плавающей запятой в int и обратно (поскольку все числовые переменные в Javascript хранятся как значения с плавающей запятой). Спасибо Чаду Шуггинсу за указание на это.

Тем не менее, как указано в нескольких ответах, существуют различные приложения javascript, которые полагаются на побитовые операции (например: криптография и графика) и которые не особенно медленны ... (см. Silky и Snarfblam на этой странице). Это говорит о том, что, хотя побитовые операции и медленнее, чем C / C ++ и другие языки, которые напрямую преобразуют побитовые операции в отдельные собственные инструкции ЦП, все же побитовые операции медленны.

Тем не менее давайте рассмотрим возможность того, что некоторые конкретные причины вызвали различные реализации JavaScript. хосты для реализации побитовых операций способом, который делает их чрезвычайно медленными, и посмотрите, имеет ли это вообще значение ...

Хотя javascript использовался для других целей, наиболее распространенное использование этого язык в предоставлении пользовательского интерфейса типа услуг .
Это говорит о том, что, хотя побитовые операции и медленнее, чем C / C ++ и другие языки, которые напрямую преобразуют побитовые операции в отдельные собственные инструкции ЦП, все же побитовые операции оказываются вялыми.

Тем не менее давайте рассмотрим возможность того, что некоторые конкретные причины вызвали различные реализации javascript хосты для реализации побитовых операций способом, который делает их чрезвычайно медленными, и посмотрите, имеет ли это вообще значение ...

Хотя javascript использовался для других целей, наиболее распространенное использование этого язык в предоставлении пользовательского интерфейса типа услуг .
Это говорит о том, что, хотя побитовые операции и медленнее, чем C / C ++ и другие языки, которые напрямую преобразуют побитовые операции в отдельные собственные инструкции ЦП, все же побитовые операции оказываются вялыми.

Тем не менее давайте рассмотрим возможность того, что некоторые конкретные причины вызвали различные реализации javascript хосты для реализации побитовых операций способом, который делает их чрезвычайно медленными, и посмотрите, имеет ли это вообще значение ...

Хотя javascript использовался для других целей, наиболее распространенное использование этого язык в предоставлении пользовательского интерфейса типа услуг .
Тем не менее допускают возможность того, что некоторые особые причины заставили различных разработчиков хостов javascript реализовывать побитовые операции таким образом, который делает их чрезвычайно медленными, и посмотрим, имеет ли это вообще значение ...

Хотя javascript использовался для других целей, наиболее распространенное использование этого языка при предоставлении услуг типа пользовательского интерфейса .
Тем не менее допускают возможность того, что некоторые особые причины заставили различных разработчиков хостов javascript реализовывать побитовые операции таким образом, который делает их чрезвычайно медленными, и посмотрим, имеет ли это вообще значение ...

Хотя javascript использовался для других целей, наиболее распространенное использование этого языка при предоставлении услуг типа пользовательского интерфейса .
Кстати, я вовсе не имею в виду это уничижительно; выполнение этих интеллектуальных функций пользовательского интерфейса с учетом различных ограничений, накладываемых на язык, а также слабого соблюдения стандартов требовало - и продолжает требовать - талантливых хакеров javascript.
Дело в том, что в контексте требований к UI-типу потребность в любом количестве побитовых операций, способных выявить медлительность javascript в обработке таких операций, в лучшем случае является редкостью. Следовательно, для типичного использования программисты должны использовать побитовые операции там, где и если этот подход кажется хорошо сочетающимся с общей программой / данными, и они должны делать это, не заботясь о проблемах производительности. В маловероятном случае узкого места производительности, возникающего из-за побитового использования, всегда можно провести рефакторинг, но лучше избегать ранней оптимизации.

Заметным исключением из вышесказанного является введение холста , в современных браузерах мы можем ожидать, что от хостов javascript потребуются более примитивные графические функции, и такие операции могут потребовать в некоторых случаях больших объемов побитовых операций (а также правильных математических функций). Вероятно, что эти службы в конечном итоге будут поддерживаться с помощью библиотек javascript (и даже в конечном итоге в качестве языковых дополнений). Для таких библиотек будут использованы общие знания отрасли, чтобы найти наиболее эффективные подходы. Кроме того, и , если действительно имеет место слабая производительность javascript с побитовыми операциями, мы получим некоторую помощь, поскольку я предсказываю, что реализации javascript на различных хостах (браузерах) будут изменены для улучшения этой конкретной области. (Это будет следовать типичной схеме развития JavaScript, которую мы наблюдали на протяжении многих лет.)

Вероятно, что эти службы в конечном итоге будут поддерживаться с помощью библиотек javascript (и даже в конечном итоге в качестве языковых дополнений). Для таких библиотек будут использоваться общие знания отрасли, чтобы найти наиболее эффективные подходы. Кроме того, и , если действительно имеет слабую производительность javascript с побитовыми операциями, мы получим некоторую помощь, поскольку я предсказываю, что реализации javascript на различных хостах (браузерах) будут изменены для улучшения этой конкретной области. (Это будет соответствовать типичному паттерну развития JavaScript, который мы наблюдали на протяжении многих лет.)

Вероятно, что эти службы в конечном итоге будут поддерживаться с помощью библиотек javascript (и даже в конечном итоге будут добавлены к языкам). Для таких библиотек будут использоваться общие знания отрасли, чтобы найти наиболее эффективные подходы. Кроме того, и , если действительно имеет место слабая производительность javascript с побитовыми операциями, мы получим некоторую помощь, поскольку я предсказываю, что реализации javascript на различных хостах (браузерах) будут изменены для улучшения этой конкретной области. (Это будет следовать типичной схеме развития JavaScript, которую мы наблюдали на протяжении многих лет.)

Для таких библиотек будут использоваться общие знания отрасли, чтобы найти наиболее эффективные подходы. Кроме того, и , если действительно имеет слабую производительность javascript с побитовыми операциями, мы получим некоторую помощь, поскольку я предсказываю, что реализации javascript на различных хостах (браузерах) будут изменены для улучшения этой конкретной области. (Это будет следовать типичной схеме развития JavaScript, которую мы наблюдали на протяжении многих лет.)

Для таких библиотек будут использоваться общие знания отрасли, чтобы найти наиболее эффективные подходы. Кроме того, и , если действительно имеет слабую производительность javascript с побитовыми операциями, мы получим некоторую помощь, поскольку я предсказываю, что реализации javascript на различных хостах (браузерах) будут изменены для улучшения этой конкретной области. (Это будет соответствовать типичному паттерну развития JavaScript, который мы наблюдали на протяжении многих лет.)

1
ответ дан 30 November 2019 в 02:10
поделиться

Здесь проводится тестирование множества побитовых операций: http://jsperf.com/rounding-numbers-down/3

Однако вы можете создать свой собственный тестовый сценарий производительности на jsPerf!

0
ответ дан 30 November 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: