Ответ
В Node.js, несмотря на асинхронную природу, существует ряд синхронных API, которые блокируют Event Loop. Их использование в основном оправдано в скриптах инициализации или CLI-утилитах, но не в серверном коде, обрабатывающем запросы.
Основные синхронные операции:
-
Файловая система (
fs): Модульfsпредоставляет синхронные версии большинства методов.const fs = require('fs'); const data = fs.readFileSync('./config.json', 'utf8'); fs.writeFileSync('./output.log', data); -
Дочерние процессы (
child_process): Для синхронного выполнения внешних команд.const { execSync } = require('child_process'); const gitVersion = execSync('git --version').toString(); -
Криптография (
crypto): Некоторые хеширующие и шифрующие методы работают синхронно.const crypto = require('crypto'); const hash = crypto.createHash('sha256').update('someData').digest('hex'); -
Сжатие (
zlib): Синхронные методы для deflate/gzip.const zlib = require('zlib'); const compressed = zlib.gzipSync(Buffer.from('data to compress')); -
Встроенные операции: Некоторые операции в ядре V8, такие как
JSON.parse()илиcrypto.randomBytes(), также являются синхронными и блокирующими.
Ключевой недостаток: Любая синхронная операция блокирует главный поток, делая приложение неотзывчивым. Например, fs.readFileSync на большом файле остановит обработку всех входящих HTTP-запросов до своего завершения.