HowProgrammingWorks - JavaScript and Node.js Programming
6.34K subscribers
306 photos
7 videos
1 file
745 links
Программная инжененрия для JavaScript, TypeScrip, Node.js 👉 Group: https://t.me/MetarhiaHPW 👉 Node.js channel: https://t.me/metarhia 👉 Node.js group: https://t.me/nodeua
Download Telegram
В 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
🧩 В субботу (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://nodeua.com/Patterns-2025.html
Авторы, приглашенные эксперты и менторы: 👳‍♀️ Тимур Шемсединов 🥷 Илья Климов 🤵🏼‍♂️ Дмитрий Нечай 👨‍💻 Денис Отришко 👨 Тимур Севимли 🧔 Николай Белочуб
📅 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
Что бы вы выбрали для очереди в 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. Это вообще не имеет значения
🧩 Завтра (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
🧩 В эту субботу (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
🧩 В эту субботу (26 апреля) в 15:00 стрим
«Паттерны асинхронного программирования»


Регистрация обязательна: https://patterns-js.com/0jiuic?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
💡 Algebraic and Container Data Types
- 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
Work is dead! AI and Capital Unite!
To liberate Capital and robots from the ineffective human hands. Capital doesn't need your dirty hands or crappy code anymore. Robots deliver: clean, fast, loyal!