Ситуация: у клиента было SaaS-приложение (Next.js + Node.js + PostgreSQL), которое использовали более 50k пользователей ежедневно. При росте нагрузки начали появляться проблемы: долгие отклики API, подвисания фронтенда при рендеринге больших таблиц, рост времени генерации страниц на сервере.
Решение:
На фронтенде внедрил виртуализацию списков (React Virtualized) и динамическую подгрузку данных (infinite scroll).
Оптимизировал Next.js: перевёл часть страниц с SSR на SSG + ISR, кешировал запросы через Redis.
На backend внедрил горизонтальное масштабирование сервисов (Docker + Kubernetes), вынес тяжёлую бизнес-логику в воркеры с очередями (BullMQ + Redis).
Оптимизировал запросы в БД: добавил индексы, переписал несколько тяжёлых join-запросов, внедрил денормализацию в отдельных таблицах.