В Node.js для очередей используется FixedQueue на базе CircularBuffer. Он оптимизирован для V8, на базе списка массивов фиксированной длины по 2048 элементов. Это гораздо лучше, чем просто push/shift на массиве, когда массив постоянно меняет длину и память перераспределяется. Но все же очень неоптимально, потому, что нам для очереди нужно добавлять только в голову списка, а брать только с хвоста, не нужно по кругу бегать в буфере. Они неправильно выбрали структуру данных, тут не нужно было циркулярный буффер реализовывать, тут нужно использовать Unrolled List, эффективнее и проще. В текущей реализации, много лишнего кода, когнитивная нагрузка выше, там битовая маска используется, и вконце буфера один элемент всегда undefined, вот этот лишний undefined - как раз не страшно, но циркулярная машинерия медленнее.
Тут есть 4 варианта кода, чтобы разобраться в вопросе: 1 - наивная очередь, 2 - очередь на списках, 3 - очередь на циркулярном буффере, 4 - очередь на развернутом списке. Для курса по паттернам я сделаю лекцию где мы подробне это разберем и составим сравнительную таблицу, для разных реализаций, где что оптимально использовать - https://github.com/HowProgrammingWorks/Queue/tree/main/JavaScript
Тут есть 4 варианта кода, чтобы разобраться в вопросе: 1 - наивная очередь, 2 - очередь на списках, 3 - очередь на циркулярном буффере, 4 - очередь на развернутом списке. Для курса по паттернам я сделаю лекцию где мы подробне это разберем и составим сравнительную таблицу, для разных реализаций, где что оптимально использовать - https://github.com/HowProgrammingWorks/Queue/tree/main/JavaScript
🧩 В субботу (12 апреля) в 15:00 cтрим Data access patterns
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и подходов:
- Repository и Active Record
- Query Builder и Object-Relational Mapping (ORM)
- Value Object и Null Object
- Data transfer object (DTO)
- Data access object (DAO) и Data Access Layer (DAL)
- Patterns: SAGA, Transaction Script и др.
Для кого эфир?
- Начинающие разработчики
- Опытные инженеры
- Тех-лиды, тим-лиды
- Самоучки без CS-образования
Кто ведет?
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и подходов:
- Repository и Active Record
- Query Builder и Object-Relational Mapping (ORM)
- Value Object и Null Object
- Data transfer object (DTO)
- Data access object (DAO) и Data Access Layer (DAL)
- Patterns: SAGA, Transaction Script и др.
Для кого эфир?
- Начинающие разработчики
- Опытные инженеры
- Тех-лиды, тим-лиды
- Самоучки без CS-образования
Кто ведет?
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
🧩 Завтра (12 апреля) в 15:00 cтрим Data access patterns
https://www.youtube.com/watch?v=diH1VfV_38o
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
https://www.youtube.com/watch?v=diH1VfV_38o
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
YouTube
🧩 Доступ к данным в JavaScript TypeScript: Repository, Active Record, DTO, ORM, Query Builder, SAGA
👉 Программа курса: https://nodeua.com/Patterns-2025.html
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
…
👳 Тимур Шемсединов - в представлении не нуждается
🧔♂️ Николай Белочуб - 10+ лет в Продуктовой Разработке, Senior SWE, OSS Contributor
🤵 Дмитрий Нечай - Chief Architect в PLATMA, CTO в HandyAI
…
🧩 Программа курса уже на сайте, кто там спрашивал, вот: https://nodeua.com/Patterns-2025.html
Авторы, приглашенные эксперты и менторы: 👳♀️ Тимур Шемсединов 🥷 Илья Климов 🤵🏼♂️ Дмитрий Нечай 👨💻 Денис Отришко 👨 Тимур Севимли 🧔 Николай Белочуб
📅 1 мая: старт курса
👉 Каталог паттернов: https://github.com/tshemsedinov/Patterns-JavaScript
👉 Плейлист стримов с экспертами: https://www.youtube.com/playlist?list=PLHhi8ymDMrQYkcxj1eb-Se6Ojd0PRJfFO
Авторы, приглашенные эксперты и менторы: 👳♀️ Тимур Шемсединов 🥷 Илья Климов 🤵🏼♂️ Дмитрий Нечай 👨💻 Денис Отришко 👨 Тимур Севимли 🧔 Николай Белочуб
📅 1 мая: старт курса
👉 Каталог паттернов: https://github.com/tshemsedinov/Patterns-JavaScript
👉 Плейлист стримов с экспертами: https://www.youtube.com/playlist?list=PLHhi8ymDMrQYkcxj1eb-Se6Ojd0PRJfFO
🧩 В эту субботу (19 апреля) в 15:00 стрим с Мурычем
«Оптимизация структур данных для V8»
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и структур данных:
- FixedQueue + CircularBuffer
- UnrolledQueue (LinkedList + Array)
- ObjectPool, LinkedList, RoundBuffer
Для кого эфир?
- Начинающие, джуны
- Опытные инженеры
- Синьоры, лиды
Кто ведет?
👳 Тимур Шемсединов
🧔♂️ Деми Мурыч
🤵 Дмитрий Нечай
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
«Оптимизация структур данных для V8»
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и структур данных:
- FixedQueue + CircularBuffer
- UnrolledQueue (LinkedList + Array)
- ObjectPool, LinkedList, RoundBuffer
Для кого эфир?
- Начинающие, джуны
- Опытные инженеры
- Синьоры, лиды
Кто ведет?
👳 Тимур Шемсединов
🧔♂️ Деми Мурыч
🤵 Дмитрий Нечай
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
❓ Что бы вы выбрали для очереди в JavaScript, чтоб было оптимизированно для V8? Все случаи будут обсуждаться в эту субботу на стриме. Источники: https://github.com/HowProgrammingWorks/Queue
• 1-queue.js — интерфейс с наивной реализацией поверх Array
• 2-naïve.js — наивная реализация поверх односвязного списка
• 3-fixed.js — FixedQueue (из Node.js) поверх FixedCircularBuffer
• 4-unrolled.js — UnrolledQueue поверх развернутого массива
• 5-spare.js — развернутый массив + один запасной (свободный) элемент
• 6-pool.js — развернутый массив + пул объектов
• 7-current.js — развернутый массив, объединенный с пулом в общий односвязный список
• 8-circular.js — кольцевой буфер + развернутый массив
• 9. Я хочу писать прикладной код. Я бы предпочел, чтобы платформа предоставляла лучшее
• 10. Это вообще не имеет значения
• 1-queue.js — интерфейс с наивной реализацией поверх Array
• 2-naïve.js — наивная реализация поверх односвязного списка
• 3-fixed.js — FixedQueue (из Node.js) поверх FixedCircularBuffer
• 4-unrolled.js — UnrolledQueue поверх развернутого массива
• 5-spare.js — развернутый массив + один запасной (свободный) элемент
• 6-pool.js — развернутый массив + пул объектов
• 7-current.js — развернутый массив, объединенный с пулом в общий односвязный список
• 8-circular.js — кольцевой буфер + развернутый массив
• 9. Я хочу писать прикладной код. Я бы предпочел, чтобы платформа предоставляла лучшее
• 10. Это вообще не имеет значения
🧩 Завтра (19 апреля) в 15:00 стрим с Мурычем
«Оптимизация структур данных и паттернов для V8»
👉 https://youtube.com/live/PncSzdGTzk0
Темы:
- Performance testing and debugging
- Performance optimization and tuning
- Observer (EventEmitter, EventTarget)
- Queue (FixedQueue + CircularBuffer)
- UnrolledQueue (LinkedList + Array)
- ObjectPool, LinkedList, RoundBuffer
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
«Оптимизация структур данных и паттернов для V8»
👉 https://youtube.com/live/PncSzdGTzk0
Темы:
- Performance testing and debugging
- Performance optimization and tuning
- Observer (EventEmitter, EventTarget)
- Queue (FixedQueue + CircularBuffer)
- UnrolledQueue (LinkedList + Array)
- ObjectPool, LinkedList, RoundBuffer
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
YouTube
🧩 Оптимизация структур данных и паттернов — V8, JavaScript, TypeScript — Деми Мурыч — Patterns 2025
👉 Программа курса: https://nodeua.com/Patterns-2025.html
👳 Тимур Шемсединов
🧔♂️ Деми Мурыч
🤵 Дмитрий Нечай
🧩 Разбор паттернов и структур данных:
- Performance testing and debugging
- Performance optimization and tuning
- Observer (EventEmitter,…
👳 Тимур Шемсединов
🧔♂️ Деми Мурыч
🤵 Дмитрий Нечай
🧩 Разбор паттернов и структур данных:
- Performance testing and debugging
- Performance optimization and tuning
- Observer (EventEmitter,…
🧩 В эту субботу (26 апреля) в 15:00 стрим «Паттерны асинхронного программирования»
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и контрактов:
- Thenable, Promise, Future, Deferred
- Callbacks, Async/await, Coroutines
- Observer, EventEmitter, Signals
- Locks API, Semaphore, Mutex
- AsyncCompose, AsyncPool, AsyncQueue
- Threads, MessageChannel, MessagePort
- function*/yield, Async Iterator
- Actor Model, Chain of responsibility
- AsyncCollector, Streams, RxJS...
👳 Тимур Шемсединов
🧔♂️ Денис Отришко — контрибьютор Node.js и Metarhia
🤵 Дмитро Нечай — Chief Architect в PLATMA, CTO в HandyAI
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
На этом канале 👉 https://www.youtube.com/@TimurShemsedinov
Разбор паттернов и контрактов:
- Thenable, Promise, Future, Deferred
- Callbacks, Async/await, Coroutines
- Observer, EventEmitter, Signals
- Locks API, Semaphore, Mutex
- AsyncCompose, AsyncPool, AsyncQueue
- Threads, MessageChannel, MessagePort
- function*/yield, Async Iterator
- Actor Model, Chain of responsibility
- AsyncCollector, Streams, RxJS...
👳 Тимур Шемсединов
🧔♂️ Денис Отришко — контрибьютор Node.js и Metarhia
🤵 Дмитро Нечай — Chief Architect в PLATMA, CTO в HandyAI
Программа курса по паттернам: https://nodeua.com/Patterns-2025.html
🧩 В эту субботу (26 апреля) в 15:00 стрим
«Паттерны асинхронного программирования»
Регистрация обязательна: https://patterns-js.com/0jiuic?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
«Паттерны асинхронного программирования»
Регистрация обязательна: https://patterns-js.com/0jiuic?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
- ADT Record (mutable and immutable)
- ADT Tuple, Sum
- Result as a Sum of Value and Failure
- Either, Maybe and Result containers
- ADT Linked list
https://github.com/HowProgrammingWorks/ADT
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - HowProgrammingWorks/ADT: Algebraic Data Types
Algebraic Data Types. Contribute to HowProgrammingWorks/ADT development by creating an account on GitHub.