← Назад к вопросам

Приведи пример задачи на производительность

1.0 Junior🔥 121 комментариев
#Soft skills и опыт работы#Кэширование и производительность

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Пример задачи на производительность в Node.js Backend

В контексте Backend разработки, задачи на производительность часто связаны с оптимизацией обработки больших объёмов данных, минимизацией времени ответа и эффективным использованием ресурсов.

Типичная задача: Оптимизация обработки CSV файла

Проблема: Приложение обрабатывает загруженный CSV файл (1GB+) и должно валидировать, трансформировать и сохранить данные в БД. Наивная реализация загружает весь файл в памяти, что приводит к:

  • OutOfMemory ошибкам
  • Блокировке event loop
  • Долгому времени ответа (несколько минут)

Решение: Streaming обработка

import { createReadStream } from 'fs';
import csv from 'csv-parser';
import { Transform } from 'stream';

// Эффективная обработка больших файлов
async function processLargeCSV(filePath) {
  const rows = [];
  const batchSize = 1000;
  
  return new Promise((resolve, reject) => {
    createReadStream(filePath)
      .pipe(csv())
      .pipe(new Transform({
        objectMode: true,
        async transform(row, encoding, callback) {
          try {
            // Валидация и трансформация
            const validated = validateRow(row);
            rows.push(validated);
            
            // Батчинг: сохраняем по 1000 строк
            if (rows.length >= batchSize) {
              await saveToDatabase(rows);
              rows.length = 0;
            }
            callback();
          } catch (error) {
            callback(error);
          }
        }
      }))
      .on('end', async () => {
        // Сохраняем оставшиеся строки
        if (rows.length > 0) {
          await saveToDatabase(rows);
        }
        resolve({ success: true });
      })
      .on('error', reject);
  });
}

Ключевые оптимизации:

  1. Streams — обработка данных chunks-ами, не загруженный файл целиком
  2. Батчинг — группировка вставок в БД (1000 строк за раз вместо N отдельных запросов)
  3. Memory leak prevention — очистка массива после сохранения
  4. Non-blocking — не блокируем event loop благодаря async/await

Метрики улучшения:

  • Memory usage: с 2GB+ → 50-100MB
  • Processing time: с 5+ минут → 30-60 сек для 1GB файла
  • Throughput: до 10k-20k записей/сек

Это классический пример задачи, где понимание Node.js async модели и работа со streams критичны для production систем.

Приведи пример задачи на производительность | PrepBro