👩💻 Which would you choose for JavaScript Queue optimised for V8? All cases will be discussed this Saturday on the stream. Sources: https://github.com/HowProgrammingWorks/Queue
Anonymous Poll
11%
1-queue.js — interface with naïve implementation on the top of Array
8%
2-naïve.js — naïve implementation on the top of singly linked list
7%
3-fixed.js — FixedQueue (from Node.js) on the top of FixedCircularBuffer
6%
4-unrolled.js — UnrolledQueue on the top of unrolled array
2%
5-spare.js — unrolled array + single spare (free) item
5%
6-pool.js — unrolled array + object pool
4%
7-current.js — unrolled array combined with pool into common singly linked list
7%
8-circular.js — circular buffer + unrolled array
28%
I want to write domain code. I'd prefer the platform to provide best
23%
It doesn't matter at all
🧩 Завтра (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-ua.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-ua.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-ua.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-ua.html
🧩 26 квітня о 15:00 стрім
«Патерни асинхронного програмування»
Усім, хто зарееструється на стрім, у чат бот, прийде посилання на запис та оглядову лекцію по усіх стилям та патернам асинхронного програмування, що позначені на схемі. Дивіться лекцію, а потім приходьте задавати питання на стрім, щоб було вже по суті справ, а не просто ентертеймент.
Реестрація обовязкова: https://patterns-js.com/7d8wqt?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
«Патерни асинхронного програмування»
Усім, хто зарееструється на стрім, у чат бот, прийде посилання на запис та оглядову лекцію по усіх стилям та патернам асинхронного програмування, що позначені на схемі. Дивіться лекцію, а потім приходьте задавати питання на стрім, щоб було вже по суті справ, а не просто ентертеймент.
Реестрація обовязкова: https://patterns-js.com/7d8wqt?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
🧩 Сьогодні 26 квітня о 15:00 стрім
«Патерни асинхронного програмування»
💡 Бонусна лекція з оглядом усіх патернів асинхронного програмування вже у боті. Заходьте і подивіться її до стріму, щоб виникли питання, та задавайте їх прям під лекцією, ми звідти теж будемо відповідати.
⚠️ Хто не отримав лекції: вона українською мовою і прийде лише тим, хто обрав при реєстрації українську (за замовченням по посилання). Можна перереєструватися на українську, щоб все ж таки отримати посилання.
👉 https://patterns-js.com/7d8wqt?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
«Патерни асинхронного програмування»
⚠️ Хто не отримав лекції: вона українською мовою і прийде лише тим, хто обрав при реєстрації українську (за замовченням по посилання). Можна перереєструватися на українську, щоб все ж таки отримати посилання.
👉 https://patterns-js.com/7d8wqt?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_26_04
Please open Telegram to view this post
VIEW IN TELEGRAM
- 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.
З понеділка починається курс по патернам
А у цю суботу 3 травня о 15:00 буде стрім
«Ключові знання, які змінять ваш JS/TS код за кілька місяців»
Фреймворки можуть допомогти вам отримати першу роботу, але шлях до рівня сеньйора - це зовсім інше. Ми поговоримо про те, що дійсно відрізняє зрілих інженерів просто кодерів.
Розв'язання задач на LeetCode - це квиток на першу роботу, але не до майстерності. Це потрібно переважно для проходження формальних інтерв'ю, особливо у міжнародних компаніях. Але якщо ви хочете навчитися писати зрозумілий, надійний і масштабований код – цього недостатньо.
Знаменита "книжечка з кабанчиком" стала скоріше символом технічного фетишизму, ніж реальним посібником з побудови надійних систем. І найчастіше її згадують лише на співбесідах.
Якщо для простої черги або циклічного списку людина тягне RabbitMQ чи Kafka - це не про інженерне рішення, це про профнепридатність. Що відрізняє сильного розробника? Наскільки глибоко потрібно розуміти алгоритми? Чи потрібні вам знання з архітектури, і які? Та ще багато інших питань на стрімі у цю суботу 3 травня о 15:00
Реестрація на стрім: https://patterns-js.com/w1hpna?utm_source=telegram_channel&utm_medium=timur_shemsedinov&utm_campaign=web_3_05&utm_content=lgt_1_tehlid
А у цю суботу 3 травня о 15:00 буде стрім
«Ключові знання, які змінять ваш JS/TS код за кілька місяців»
Фреймворки можуть допомогти вам отримати першу роботу, але шлях до рівня сеньйора - це зовсім інше. Ми поговоримо про те, що дійсно відрізняє зрілих інженерів просто кодерів.
Розв'язання задач на LeetCode - це квиток на першу роботу, але не до майстерності. Це потрібно переважно для проходження формальних інтерв'ю, особливо у міжнародних компаніях. Але якщо ви хочете навчитися писати зрозумілий, надійний і масштабований код – цього недостатньо.
Знаменита "книжечка з кабанчиком" стала скоріше символом технічного фетишизму, ніж реальним посібником з побудови надійних систем. І найчастіше її згадують лише на співбесідах.
Якщо для простої черги або циклічного списку людина тягне RabbitMQ чи Kafka - це не про інженерне рішення, це про профнепридатність. Що відрізняє сильного розробника? Наскільки глибоко потрібно розуміти алгоритми? Чи потрібні вам знання з архітектури, і які? Та ще багато інших питань на стрімі у цю суботу 3 травня о 15:00
Реестрація на стрім: https://patterns-js.com/w1hpna?utm_source=telegram_channel&utm_medium=timur_shemsedinov&utm_campaign=web_3_05&utm_content=lgt_1_tehlid
- імутабельні та мутабельні записи (об'єкти)
- повне клонування, модифікація зі збереженням форми запису
- перевірка типів у рантаймі, дефолтні значення
- імутабельні записи із економією пам'яті завдяки ланцюжку прототипів
- пришвидшення пошуку полів завдяки Object.create(null)
Тут ще можна багато оптимізувати, повне рішення буде тут: https://github.com/metarhia/metautil/pull/298
class Record {
static immutable(defaults) {
return Record.#build(defaults, false);
}
static mutable(defaults) {
return Record.#build(defaults, true);
}
static #build(defaults, isMutable) {
const fields = Object.keys(defaults);
const defaultValues = Object.create(null);
for (const key of fields) {
defaultValues[key] = defaults[key];
}
class Struct {
static fields = fields;
static defaults = defaultValues;
static mutable = isMutable;
static create(data = {}) {
const obj = Object.create(null);
for (const key of fields) {
const base = defaultValues[key];
const value = key in data ? data[key] : base;
if (!Record.#sameType(base, value)) {
const exp = Record.#typeof(base);
const act = Record.#typeof(value);
throw new TypeError(
`Invalid type for "${key}": expected ${exp}, got ${act}`,
);
}
obj[key] = value;
}
return isMutable ? Object.seal(obj) : Object.freeze(obj);
}
}
return Struct;
}
static #typeof(value) {
if (Array.isArray(value)) return 'array';
if (value === null) return 'null';
return typeof value;
}
static #sameType(a, b) {
if (Array.isArray(a)) return Array.isArray(b);
if (a === null) return b === null;
return typeof a === typeof b;
}
static #validate(instance, updates) {
for (const key of Object.keys(updates)) {
if (!Reflect.has(instance, key)) continue;
const current = instance[key];
const next = updates[key];
if (!Record.#sameType(current, next)) {
const exp = Record.#typeof(current);
const act = Record.#typeof(next);
throw new TypeError(
`Invalid type for "${key}": expected ${exp}, got ${act}`,
);
}
}
}
static update(instance, updates) {
if (Object.isFrozen(instance)) {
throw new Error('Cannot mutate immutable Record');
}
Record.#validate(instance, updates);
for (const key of Object.keys(updates)) {
if (Reflect.has(instance, key)) {
instance[key] = updates[key];
}
}
return instance;
}
static fork(instance, updates) {
Record.#validate(instance, updates);
const obj = Object.create(null);
for (const key of Object.keys(instance)) {
obj[key] = Reflect.has(updates, key) ? updates[key] : instance[key];
}
return Object.isFrozen(instance) ? Object.freeze(obj) : Object.seal(obj);
}
static branch(instance, updates) {
Record.#validate(instance, updates);
const obj = Object.create(instance);
for (const key of Object.keys(updates)) {
Reflect.defineProperty(obj, key, {
value: updates[key],
writable: true,
configurable: true,
enumerable: true,
});
}
return Object.isFrozen(instance) ? Object.freeze(obj) : Object.seal(obj);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
⚠️ Срач - Стоп! Усі на стрім!
О 15:00 «Ключові знання, які змінять ваш JS/TS код за кілька місяців»
Реестрація: https://patterns-js.com/w1hpna?utm_source=telegram_channel&utm_medium=timur_shemsedinov&utm_campaign=web_3_05&utm_content=lgt_1_tehlid
О 15:00 «Ключові знання, які змінять ваш JS/TS код за кілька місяців»
Реестрація: https://patterns-js.com/w1hpna?utm_source=telegram_channel&utm_medium=timur_shemsedinov&utm_campaign=web_3_05&utm_content=lgt_1_tehlid
- V8 v13.6
- npm v11
- Explicit resource management
- undici 7
- improved Permission Model
https://nodejs.org/en/blog/release/v24.0.0
- npm v11
- Explicit resource management
- undici 7
- improved Permission Model
https://nodejs.org/en/blog/release/v24.0.0