Характеристики:
Примеры в Node.js:
// Криптографические операции
const crypto = require('crypto');
function hashPassword(password) {
return crypto.pbkdf2Sync(password, 'salt', 100000, 64, 'sha512');
}
// Сложные математические вычисления
function calculatePrimes(max) {
const primes = [];
for (let i = 2; i <= max; i++) {
let isPrime = true;
for (let j = 2; j < i; j++) {
if (i % j === 0) {
isPrime = false;
break;
}
}
if (isPrime) primes.push(i);
}
return primes;
}
Как обрабатывать в Node.js:
Характеристики:
Примеры в Node.js:
// Обработка больших файлов в памяти
const fs = require('fs');
function processLargeFile() {
const data = fs.readFileSync('huge-file.json'); // Загружает весь файл в RAM
const parsed = JSON.parse(data); // Дополнительное потребление памяти
return parsed.map(transformData);
}
// Кеширование больших объёмов данных
const cache = new Map();
function getExpensiveData(id) {
if (!cache.has(id)) {
const data = computeData(id); // Ресурсоёмкая операция
cache.set(id, data);
}
return cache.get(id);
}
Как обрабатывать в Node.js:
Характеристики:
Примеры в Node.js:
// Работа с базой данных
async function getUsers() {
return db.query('SELECT * FROM users WHERE active = true');
}
// HTTP запросы к внешним API
async function fetchExternalData(url) {
const response = await fetch(url);
return response.json();
}
// Файловые операции
async function processFile(path) {
const stream = fs.createReadStream(path);
for await (const chunk of stream) {
await processChunk(chunk);
}
}
Как обрабатывать в Node.js:
Характеристика | CPU-intensive | RAM-intensive | I/O-intensive |
---|---|---|---|
Основной ресурс | Процессор | Память | Диск/Сеть |
Блокировка EventLoop | Да | Иногда | Нет |
Параллелизм | Worker Threads | Ограничен памятью | Асинхронные вызовы |
Примеры | Алгоритмы, Crypto | Big Data, Кеши | DB, API, Файлы |
// Для CPU-bound задач
const { Worker } = require('worker_threads');
new Worker('./cpu-intensive-task.js');
// Для RAM-bound задач
function processInChunks(data, chunkSize, handler) {
const results = [];
for (let i = 0; i < data.length; i += chunkSize) {
const chunk = data.slice(i, i + chunkSize);
results.push(handler(chunk));
}
return results;
}
// Для I/O-bound задач
async function parallelIO(tasks) {
return Promise.all(tasks.map(task => task()));
}
CPU-intensive:
RAM-intensive:
I/O-intensive:
Понимание типа задачи помогает выбрать правильную стратегию: