
Node.js под нагрузкой: что ломается первым в кластере
Один процесс Node упирается в одно ядро и деградирует раньше, чем кончается CPU. Разбираем, что ломается первым при масштабировании через cluster и worker_threads и как это увидеть в метриках.

Один процесс Node упирается в одно ядро и деградирует раньше, чем кончается CPU. Разбираем, что ломается первым при масштабировании через cluster и worker_threads и как это увидеть в метриках.

Один процесс Node.js использует одно ядро. Разбираем, когда спасает cluster, когда worker_threads, а когда ни то ни другое — и чем платите за каждый вариант.

Процесс Node растёт до 1,5 ГБ за сутки, потом падает с heap out of memory. Разбираем, как снять heap snapshot, найти удерживаемые объекты и закрыть типовые источники утечек.

Сервис держит 200 RPS, но при 800 latency p99 подскакивает с 40 мс до 3 секунд, хотя CPU не в потолке. Разбираем, как фазы event loop и очередь микрозадач превращаются в узкое место.

Рефакторинг одного условного типа сломал вывод в трёх местах, но компилятор молчал: код собирался. Разбираем, почему юнит-тесты не ловят такие регрессии и как покрыть типы тестами.

TypeScript проверяет типы на этапе компиляции, но JSON из сети приходит в рантайме и типам не подчиняется. Разбираем, чем и как валидировать данные на входе, во что это обходится по размеру бандла и производительности.

Вы подключаете JS-библиотеку, а TypeScript ругается на отсутствие типов. Разбираем четыре способа дать типы: @types, встроенные .d.ts, свой файл объявлений и module augmentation — с ценой каждого.

Перевод живого JavaScript-проекта на TypeScript почти никогда не идёт по инструкции из README. Разбираем стратегии, цену strict-режима и места, где типизация ломается о реальный код.

Флаг strict превращает молчаливые баги в ошибки компиляции, но включить его в проекте на 200 файлов одним махом нельзя. Разбираем, что делает каждый под-флаг и как мигрировать постепенно.

Partial, Pick, Omit и Record выглядят удобно, но легко превращают типы в мусор. Разбираем, где встроенные утилиты помогают, а где скрывают ошибки и ломают вывод типов.

Функция-обёртка над fetch возвращала any, автодополнение молчало, ошибки типов ловились в рантайме. Разбираем, где сломались дженерики и как вернуть вывод типов через все слои.

fetch возвращает any, а ваш интерфейс Response — обещание, которое сервер не давал. Разбираем четыре способа связать типы с реальными данными и цену каждого.