uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

HowProgrammingWorks - JavaScript and Node.js Programming

HowProgrammingWorks - JavaScript and Node.js Programming

Kanalga Telegram’da o‘tish

Программная инжененрия для JavaScript, TypeScrip, Node.js 👉 Group: https://t.me/How_Programming_Works 👉 Node.js channel: https://t.me/metarhia 👉 Node.js group: https://t.me/nodeua

Ko'proq ko'rsatish
6 575
Obunachilar
-724 soatlar
-47 kun
+5930 kun
Postlar arxiv
🧩 В эту субботу (26 апреля) в 15:00 стрим «Паттерны асинхронного программирования» На этом канале 👉 https://www.youtube.com
🧩 В эту субботу (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

🧩 Завтра (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

❓ Что бы вы выбрали для очереди в JavaScript, чтоб было оптимизированно для V8? Все случаи будут обсуждаться в эту субботу на
❓ Что бы вы выбрали для очереди в 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://www.youtube.com/@TimurShemsedinov Разбор паттернов и структур данных: - FixedQueue + CircularBuffer - UnrolledQueue (LinkedList + Array) - ObjectPool, LinkedList, RoundBuffer Для кого эфир? - Начинающие, джуны - Опытные инженеры - Синьоры, лиды Кто ведет? 👳 Тимур Шемсединов 🧔‍♂️ Деми Мурыч 🤵 Дмитрий Нечай Программа курса по паттернам: 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

🧩 Завтра (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

🧩 В субботу (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

В 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

Как изолировать стейт при помощи паттерна Actor и как написать Event loop при помощи Reactor и Proactor https://youtube.com/live/tpY01TLctAs

🧩 Завтра, 5 апреля, 15:00 — 18:00 будет стрим, на котором мы разберем патерны: ∙ Actor — Инкапсулирует состояние и поведение, взаимодействуя асинхронно через передачу и последовательную обработку сообщений в очереди. Обеспечивает потокобезопасность и асинхронную безопасность при параллельном выполнении путём изоляции состояния актора. ∙ Reactor (event-loop) — Обрабатывает параллельные события синхронно, помещая их в очередь и направляя зарегистрированным обработчикам. Реализует событийно-ориентированную асинхронную обработку поверх синхронного цикла событий. Часто применяется в системах с интенсивным I/O, упрощая управление конкурентными событиями. ∙ Proactor — Цикл событий, в котором операции начинаются пользовательским кодом, но завершаются внешним агентом (например, I/O подсистемой), который запускает обработчик завершения по завершении операции (возвращая данные в callback). ∙ И будет презентация курса Patterns 2025 👉 Сохраните себе ссылку на каталог паттернов с примерами кода: https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru 👉 Подпишитесь на канал, чтобы не пропустить этот и следующие стримы: https://www.youtube.com/@TimurShemsedinov ∙ Готовлю также стрим по доступу к данным с обсуждением паттернов: Active Record, DAO, DTO, DAL, Repository, ORM, Query Builder, Transaction Script, Template Method

🧩 This and much more will be covered in Patterns 2025 course
const getTomorrowDate = () => {
  const timeout = 86400000;
  return new Promise((resolve) => {
    setTimeout(() => resolve(new Date()), timeout)
  });
};
// ⚡️ Electricity over IP, as defined in RFC 3251: https://datatracker.ietf.org/doc/html/rfc3251
const socket = new WebSocket('wss://lamp.local:3251');

socket.onopen = () => {
  socket.send(JSON.stringify({ voltage: 230, frequency: 50 }));
};

socket.onmessage = (e) => {
  const { voltage, frequency } = JSON.parse(e.data);
  console.log(`⚡️ Transferred: ${voltage}V @ ${frequency}Hz`);
};
const Coin = (v) => ({ map: (f) => Coin(f(v)) });
const flip = () => crypto.getRandomValues(new Uint8Array(1))[0];
Coin(flip()).map((r) => (r & 1 ? '🪙' : '💩')).map(console.log);
const findMeaningOfLife = () => {
  const offset = 0;
  const delay = Infinity;
  return new Promise((resolve) => {
    setTimeout(() => resolve(42 + offset), delay);
  });
};
['🥚', '🥚',  '🐓', '🥚', '🥚', '🥚'].toSorted()
class Coming {
  constructor() {
    return new Promise((resolve) => 
      setTimeout(() => {
        resolve(this);
      }, DAY_OF_JUDGMENT - Date.now())
    );
  }
}

const secondComing = await new Coming();
((<F extends () => void>(Function: F = {} as F) => Function())());
class Future {
  constructor() {
    const { name: key } = this.constructor;
    const value = void [].length;
    throw new Error(`${key} is ${value}`);
  }
}

new Future();

💡 Обновлен индекс открытого каталога паттернов - теперь там есть описание 1-2 строки, которые напомнит вам суть паттерна - добавлены паттерны не из GoF, но распространены в JavaScript и TypeScript - появилось больше ссылок на примеры https://github.com/tshemsedinov/Patterns-JavaScript/tree/ru

Мастер-класс "Паттерны в JavaScript и TypeScript" ⏰ Начало: сегодня, 22 марта в 15:00 (Киевское время) 👳 Тимур Шемсединов 🥷
Мастер-класс "Паттерны в JavaScript и TypeScript" ⏰ Начало: сегодня, 22 марта в 15:00 (Киевское время) 👳 Тимур Шемсединов 🥷 Илья Климов 🧔‍♂️ Дмитрий Нечай Регистрация через Телеграмм-бот: https://patterns-js.com/tpk6nh?traffic_mark=7k8x47&utm_source=organic&utm_medium=telegram2metarhia&utm_campaign=web

🧩 Запись стрима с регистрацией на мастер класс https://youtube.com/live/kw3UBUOAh0I Бесплатный мастер-класс "Паттерны в JavaScript и TypeScript" ⏰ Начало: в эту субботу 22 марта в 15:00 (Киевское время) Участники: 👳 Тимур Шемсединов 🥷 Илья Климов 🧔‍♂️ Дмитрий Нечай Регистрация через Телеграмм-бот: https://patterns-js.com/tpk6nh?traffic_mark=7k8x47&utm_source=organic&utm_medium=telegram2metarhia&utm_campaign=web