Ну и зачем все это нужно? Почему нам не достаточно обычных объектов JS? 🤯
Ну, давайте разбираться.
1. Во-первых, я могу без проблем передать ArrayBuffer как в другой поток (причем без копирования), так и по сети без необходимости сериализации (fetch поддерживает данные в виде ArrayBuffer). Т.е. такой способ передачи ОЧЕНЬ быстрый.
2. Парсинг таких данных также делает тривиальным образом, т. к. фактически у нас есть схема сдвигов байтов относительно друг друга и все сводится к интерпретации конкретного типа внутри.
3. Т. к. все данные фактически находятся внутри одной памяти (ArrayBuffer) и лежат рядом, то у нас все очень хорошо ложиться в кеш процессора, а значит и работать будет очень хорошо. Встроенные объекты JS таким похвастаться часто не могут из-за динамической типизации.
4. Можно работать поточно - т.е. нам нет необходимости держать в памяти сразу все данные, а выгружать чанками.
5. За счет отсутствия лишних ссылок, то такие данные будут потреблять куда меньше памяти.
Да, без всего этого можно вполне обойтись вероятно в большинстве типовых JS проектов. Но если вы делаете приложение, которое очень нагружает процессор или требует много памяти: игры, работа с видео или аудио, агрегация больших данных, научные расчеты...
Окей, круто, но как это реализовать? У меня есть задумка записать видео для моего блога в телеграме, где я реализую такую штуку. А пока вы можете попытаться реализовать это самостоятельно. Так сказать опробую формат.
Всем базы! 💪
Ну, давайте разбираться.
1. Во-первых, я могу без проблем передать ArrayBuffer как в другой поток (причем без копирования), так и по сети без необходимости сериализации (fetch поддерживает данные в виде ArrayBuffer). Т.е. такой способ передачи ОЧЕНЬ быстрый.
2. Парсинг таких данных также делает тривиальным образом, т. к. фактически у нас есть схема сдвигов байтов относительно друг друга и все сводится к интерпретации конкретного типа внутри.
3. Т. к. все данные фактически находятся внутри одной памяти (ArrayBuffer) и лежат рядом, то у нас все очень хорошо ложиться в кеш процессора, а значит и работать будет очень хорошо. Встроенные объекты JS таким похвастаться часто не могут из-за динамической типизации.
4. Можно работать поточно - т.е. нам нет необходимости держать в памяти сразу все данные, а выгружать чанками.
5. За счет отсутствия лишних ссылок, то такие данные будут потреблять куда меньше памяти.
Да, без всего этого можно вполне обойтись вероятно в большинстве типовых JS проектов. Но если вы делаете приложение, которое очень нагружает процессор или требует много памяти: игры, работа с видео или аудио, агрегация больших данных, научные расчеты...
Окей, круто, но как это реализовать? У меня есть задумка записать видео для моего блога в телеграме, где я реализую такую штуку. А пока вы можете попытаться реализовать это самостоятельно. Так сказать опробую формат.
Всем базы! 💪