23:53

Bit-fiddling

Ваша Всратость

ДжС хотя и высокоуровневый скриптовый язык с очень вольной типизацией (ну если только вы не воткнули TypeScript), однако в нем есть возможность упасть на уровень манипуляций байтами и начать гонять биты направо и налево (а еще XORuть и творить прочие непотребства), словно мы в старом-добром C или Pascal. А самое главное - получать из этого преимущества по скорости (закроем глаза, что код становицо не таким читаемым).



Контрольный пример - запись, в которой есть поля "текущее значение" и "ожыдаемое значение" и процесс, в ходе которого ожидаемое значение становится текущим, а новое ожидаемое значение приезжает извне.



Резалт браузерозависимый, три прогона серии по 1,5 ляма циклов

  1. Опера. 39.01%; 29.76%; 35.34%

  2. Хром. 35.99%; 32.73%; 39.86%

  3. ФыФокс. 38.55%; 32.93%; 40.48%

  4. Эдж. 37.56%; 31.18%; 38.17%



Собсна, научный экскремент можно посмотреть здесь

@музыка: НОМ - Дедушкин Табак

@темы: кодерастия

Комментарии
11.09.2020 в 10:49

Все (не)совпадения (не)случайны
Такие нюансы веб-разработки, что ничего не понятно 🙈
Ну, точнее, понятно, но не то, от чего прям сердце замирает 😀
11.09.2020 в 19:50

Ваша Всратость
2anhelmoders, Ну здесь все упираецо в поиск наиболее компактного и быстрого способа хранения данных. В JS для этого применяются объекты или массивы, но в более ранних (и низкоуровневых) языках (С, Pascal, FORTRAN) существует такая штука, как битовое поле - один или несколько байтов, каждый разряд (или группа разрядов) которого хранит в себе отдельную и независимую информацию, как в "обычном" объекте - его поле.

Низкоуровневые сущности позволяют выиграть в производительности и плотности хранения (вместо создания отдельных указателей на переменные-поля объекта мы обращаемся к разрядам внутри единственной переменной)

Ну и йа решыла посмотреть, что будет, если в Js попытаться пойти на похожий шаг. Большынство обычных сайтов не получат так весомое преимущество, но если вопрос упирается в производительность (графика, расчеты и моделирование, геймдев), то подобные трюки могут быть уместны и желательны.

+ Сейчас развиваецо еще одна технология - webAssembly, позволяющая на языках более низкого уровня (C/C++/Rust) писать собственные подключаемые функцыи к Js, работающие быстрее чистого жабоскриптового кода. Учитывая склонности и пристрастия, мне стоит вникнуть в методы написания высокооктанового кода.

Расширенная форма

Редактировать

Подписаться на новые комментарии