Коротка відповідь
seniorPerformance issues — це надмірна витрата ресурсів, що знижує швидкість відповіді. Виявляю їх через профайлер (Node.js‑inspector, Clinic.js) та метрики (Prometheus). Усунення включає оптимізацію запитів, кешування, асинхронність; запобігання — CI‑тестування з load‑testing, code reviews і моніторинг у продакшн.
Повне пояснення
Що це і навіщо
Performance issues – це ситуації, коли додаток працює повільно або споживає надмірні ресурси (CPU, пам’ять, I/O). Вони знижують UX, підвищують витрати хостингу і можуть призвести до падіння сервісу.
Ключові принципи
- Вимірюваність – метрики повинні бути доступними через Prometheus, Grafana.
- Профілювання – Node.js‑inspector, Clinic.js,
perf_hooks. - Бенчмаркінг – Jest +
benchmark, Artillery, k6.
Як це працює
- Моніторинг збирає метрики (latency, throughput, memory). 2. Профайлер показує, де витрачається час (CPU stack traces). 3. Тестування з навантаженням ідентифікує bottleneck‑и.
Практика та реалізація
import { performance } from 'perf_hooks';
const start = performance.now();
// код
console.log('duration', performance.now() - start);
// Node.js‑inspector запуск
node --inspect-brk app.js
Тестування
- Unit: Jest +
jest-mockдля моків DB. - Integration: Supertest + Jest, тестуємо API‑endpoints.
- Load: Artillery
dev:
target: http://localhost:3000
phases:
- duration: 60
arrivalRate: 50
Дизайн‑рішення
- Кешування: Redis, in‑memory LRU.
- Паралелізація:
Promise.all, worker_threads. - Оптимізовані запити: індекси, агрегації.
Безпека та приватність
- Rate limiting: express-rate-limit, Redis.
- Валідація: Joi, class-validator.
Особливості в контексті backend (NestJS/Express)
- Middleware для логування і таймінгу.
- Interceptors у NestJS для кешу.
Оптимізація, типові помилки
- N+1 запити – використати
TypeORMeager loading. - Синхронний код у Node.js – замінити на асинхронні.
- Memory leaks – перевірка
process.memoryUsage().
Диагностика чеклист
- Симптом: latency > 500 ms.
- Причина: довгий DB‑запит, синхронна обробка.
- Дія: індексувати, розбити на async.
Альтернативи
- Serverless (AWS Lambda) – масштабування, але холодний старт.
- Microservices – розподіл навантаження.
Крайні випадки
- Перевантаження CPU – throttling.
- Переповнення пам’яті – garbage‑collection tuning.
- Deadlocks у БД – lock timeout.
- Race conditions – atomic operations.
- Неправильні індекси – query planner.
- Синхронний I/O – blocking.
- Неправильна конфігурація кешу – stale data.
- Недостатня моніторинг – невиявлені проблеми.