← Назад к вопросам
Приведи пример задачи на производительность
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);
});
}
Ключевые оптимизации:
- Streams — обработка данных chunks-ами, не загруженный файл целиком
- Батчинг — группировка вставок в БД (1000 строк за раз вместо N отдельных запросов)
- Memory leak prevention — очистка массива после сохранения
- 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 систем.