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

Сервис держит 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 — обещание, которое сервер не давал. Разбираем четыре способа связать типы с реальными данными и цену каждого.

Почему npm install в Dockerfile раздувает образ до гигабайта, зачем нужны две стадии сборки и чем npm ci отличается от npm install на CI.

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

Как снимать метрики с Node.js-сервиса через prom-client, не блокируя event loop, что именно мерить помимо CPU и почему ваш RPS-график врёт, если считать его в обработчике.