Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Express.jsВсе вопросы
Express.jsSeniorПроектирование систем

Каковы лучшие практики производительности для продакшн Express-приложений?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Production-производительность Express достигается через NODE_ENV=production, gzip-сжатие, кеширование через Redis, кластеризацию всех CPU ядер, HTTP keep-alive, исключение синхронного кода в hot path и профилирование event loop.

1. NODE_ENV=production

Это не просто переменная — Express читает её для включения оптимизаций: кеш шаблонов, сокращённые stack traces, отключение дорогих debug-операций. Всегда устанавливать явно.

NODE_ENV=production node server.js

Производительность Express в продакшне

2. Сжатие ответов

import compression from 'compression';

// Только для текстовых ответов > 1KB
app.use(compression({
  threshold: 1024,
  filter: (req, res) => {
    if (req.headers['x-no-compression']) return false;
    return compression.filter(req, res);
  },
}));

3. Кластеризация

Один Node.js процесс использует одно ядро CPU. Для многоядерных серверов нужен cluster или PM2:

// cluster.js
import cluster from 'cluster';
import { cpus } from 'os';
import { createServer } from './server.js';

if (cluster.isPrimary) {
  const numCPUs = cpus().length;
  console.log(`Primary ${process.pid} running, forking ${numCPUs} workers`);
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  cluster.on('exit', (worker) => {
    console.log(`Worker ${worker.process.pid} died, restarting...`);
    cluster.fork();
  });
} else {
  createServer();
}
# ecosystem.config.yml (PM2)
apps:
  - name: api
    script: src/server.js
    instances: max
    exec_mode: cluster
    env_production:
      NODE_ENV: production

4. HTTP Keep-Alive и таймауты

const server = app.listen(PORT);

// Keep-alive для повторного использования соединений
server.keepAliveTimeout = 65_000; // > ALB idle timeout (60s)
server.headersTimeout = 66_000;   // > keepAliveTimeout

5. Кеширование через Redis

import { createClient } from 'redis';

const redis = createClient({ url: process.env.REDIS_URL });
await redis.connect();

const cacheMiddleware = (ttlSeconds) => async (req, res, next) => {
  const key = `cache:${req.originalUrl}`;
  const cached = await redis.get(key);
  if (cached) {
    res.setHeader('X-Cache', 'HIT');
    return res.json(JSON.parse(cached));
  }
  const originalJson = res.json.bind(res);
  res.json = async (data) => {
    await redis.setEx(key, ttlSeconds, JSON.stringify(data));
    res.setHeader('X-Cache', 'MISS');
    originalJson(data);
  };
  next();
};

app.get('/api/products', cacheMiddleware(300), productsController.list);

6. Оптимизация работы с БД

  • Connection pooling с правильным max (обычно 10–20 на процесс).
  • Индексы на колонки WHERE/JOIN — одна плохая запись может убить весь сервис.
  • Paginated queries вместо SELECT * для больших таблиц.
  • Prepared statements для повторяющихся запросов.

7. Мониторинг event loop lag

import { monitorEventLoopDelay } from 'perf_hooks';

const h = monitorEventLoopDelay({ resolution: 20 });
h.enable();

setInterval(() => {
  const lagMs = h.mean / 1e6;
  if (lagMs > 50) {
    logger.warn({ lagMs }, 'High event loop lag detected');
  }
  h.reset();
}, 10_000);

8. Статические файлы

Никогда не отдавать статику через Express в продакшне. Использовать nginx, CDN или отдельный S3/MinIO. Express добавляет overhead Node.js на каждый файл.

Подводные камни

  • Устанавливать compression() после роутов — middleware применяется только к запросам, зарегистрированным после него в цепочке.
  • Слишком маленький пул соединений: при 4 воркерах и max: 20 PostgreSQL получит 80 соединений — проверяйте max_connections на стороне БД.
  • Кешировать ответы с персонализированными данными (по user_id) без учёта ключа кеша — утечка данных между пользователями.
  • Забывать инвалидировать кеш при мутациях — клиенты видят устаревшие данные.
  • keepAliveTimeout меньше idle timeout load balancer (AWS ALB = 60s по умолчанию) — ALB разрывает соединения с ошибкой 502.
  • JSON.stringify на гигантских объектах в hot path блокирует event loop — профилировать с clinic.js.
  • Синхронный console.log в production — использовать pino с async transport.

Частые вопросы на собеседовании

  • В чём разница между app.use() и app.get() / app.post()?
  • Какова роль next() в middleware Express? Что происходит, если его не вызвать?
  • Как работает маршрутизация в Express? Как организовать маршруты с помощью express.Router()?
  • Что такое middleware в Express.js? Объясните цикл запрос-ответ (request-response cycle).

Типичные ошибки

  • Дает общий ответ про Node.js и не называет конкретные API Express.js.
  • Не объясняет, где в lifecycle находится производительность Express в продакшене.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

Что проверяет интервьюер

  • Может объяснить производительность Express в продакшене на примере кода.
  • Называет ключевые API: NODE_ENV=production, compression, reverse proxy.
  • Использует точные API Express.js, а не вымышленные hooks/decorators/methods.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

Как вы знаете этот вопрос?

Проверить себя по теме Express.js →

Источники

  • https://expressjs.com/en/advanced/best-practice-performance.html
  • https://expressjs.com/en/advanced/healthcheck-graceful-shutdown.html
←Предыдущий вопросПроект на Express.js вырос из MVP в большой production-сервис. Какие проблемы архитектуры и сопровождения вы ожидаете увидеть?Следующий вопрос→В чём разница между middleware уровня приложения, уровня роутера и обработчиком ошибок?

Связанные темы

Express.jsobservabilityperformance-tuningreliability