Cyber News

Node.js 26.5.0: импорт текста как модулей, потоковый Blob и пост-квантовый TLS

M
Markabus
·13 июля 2026 г.
Тёмная графитовая сцена: голографический интерфейс кода, где текстовый документ превращается в поток JavaScript-модуля, на фоне узловая сеть рантайма; синий — только акцент

Проект Node.js выпустил версию 26.5.0 — очередной релиз «текущей» ветки (Current — ветка, где обкатываются новые возможности перед долгосрочной поддержкой). На первый взгляд это рядовое минорное обновление, но под капотом собрано сразу несколько давно ожидаемых вещей: импорт текстовых файлов напрямую как модулей, потоковое чтение объектов Blob, штатное раздвоение потоков и наблюдаемость пост-квантового TLS. Разберёмся, что именно поменялось и почему на это стоит обратить внимание.

Что за релиз и почему он важен

Версия 26.5.0 вышла 8 июля 2026 года под управлением релиз-менеджера Ричарда Лау (Richard Lau). Это ветка Current: в ней Node.js обкатывает свежие API, прежде чем «заморозить» их в LTS (Long-Term Support — версия с долгосрочной поддержкой, которую принято ставить в продакшн). По графику проекта чётные мажорные версии со временем переходят в статус LTS, и Node.js 26 должен получить его уже в октябре 2026-го. Иными словами, возможности, которые появляются сейчас, совсем скоро окажутся в версии, рекомендованной для промышленной эксплуатации, — поэтому знакомиться с ними имеет смысл заранее.

Отдельно в релизе отмечена смена подписанта сборок: артефакты будущих версий теперь заверяются ключом Стюарта Эддисона (Stewart X Addison). Деталь техническая, но важная для тех, кто проверяет цифровые подписи пакетов на этапе сборки и в защищённых пайплайнах.

Импорт текстовых файлов как модулей

Самая заметная новинка — экспериментальный флаг --experimental-import-text. Он разрешает импортировать обычный текстовый файл прямо в ES-модуль и получать его содержимое как строку, без обращения к файловой системе в рантайме:

// запуск: node --experimental-import-text app.mjs
import readme from './readme.txt' with { type: 'text' };

console.log(readme); // содержимое файла как обычная строка

Синтаксис повторяет уже привычный импорт JSON через «атрибуты импорта» (import attributes) — конструкцию with { type: '...' }. Раньше, чтобы подтянуть в код SQL-запрос, шаблон письма, GraphQL-схему или лицензию, приходилось вызывать fs.readFile и вручную разбираться с путями и асинхронностью. Теперь текст становится частью графа модулей: его видно сборщику, он резолвится по тем же правилам, что и остальные импорты, и доступен синхронно на верхнем уровне модуля.

Важная оговорка: возможность намеренно оставлена экспериментальной. Один из мейнтейнеров, Джеффри Бут (Geoffrey Booth), настоял держать её под флагом, пока не устоятся совместимость с браузерами и поведение в npm-пакетах — это соответствует практике TC39 (комитет, стандартизирующий JavaScript). Поэтому в продакшене на неё пока полагаться рано, но попробовать в инструментах и прототипах уже можно.

Потоковое чтение Blob: textStream()

Второе нововведение — метод Blob.prototype.textStream(), который возвращает ReadableStream<string>, то есть поток уже декодированных из UTF-8 строковых фрагментов. До сих пор у Blob были методы text() и arrayBuffer(), но оба загружают всё содержимое в память целиком. Для больших файлов это дорого и рискованно.

const blob = await fetch('/big-log.txt').then(r => r.blob());

for await (const chunk of blob.textStream()) {
  // обрабатываем текст по кускам, не держа весь файл в памяти
  process(chunk);
}

На практике это упрощает потоковую обработку журналов, выгрузок и пользовательских загрузок: можно читать и парсить данные по мере поступления, а не после полной загрузки. Автор изменения — Мэтью Эйткен (Matthew Aitken).

ReadableStream.tee(): раздвоение потока из коробки

Node.js теперь штатно отдаёт функцию ReadableStream.tee() из стандарта WHATWG Streams. Она «раздваивает» один читаемый поток на два независимых, каждый из которых можно потреблять отдельно. Классический сценарий — прочитать данные один раз, но пустить их сразу по двум маршрутам: например, одновременно считать хеш файла и записать его в хранилище, или залогировать сырой ответ и тут же его распарсить.

const [a, b] = readable.tee();
// a — считаем контрольную сумму
// b — пишем в файл, оба потока независимы

Раньше подобное приходилось собирать вручную или тянуть сторонние зависимости. Теперь поведение соответствует спецификации и работает так же, как в браузере. Изменение внёс Маттео Коллина (Matteo Collina), один из ключевых мейнтейнеров ядра.

Пост-квантовый TLS стал наблюдаемым

Метод tlsSocket.getEphemeralKeyInfo() теперь сообщает, какая именно группа ключевого обмена (TLS group) была согласована при рукопожатии, — включая пост-квантовые варианты вроде ML-KEM и гибридные схемы. Пост-квантовая криптография (устойчивая к атакам будущих квантовых компьютеров) постепенно приходит в TLS, и до сих пор проверить из кода, что соединение действительно использует квантово-устойчивый обмен ключами, было непросто.

Теперь это делается штатно: приложение или система мониторинга может убедиться, что защищённые соединения переходят на новые алгоритмы, и вовремя заметить, если клиент или сервер откатились на классический обмен. Для команд, которые уже планируют миграцию инфраструктуры на пост-квантовые протоколы, это конкретный инструмент контроля. Автор — Филип Скокан (Filip Skokan).

Точные метрики цикла событий

Функция monitorEventLoopDelay() получила опцию samplePerIteration. Раньше задержку цикла событий (event loop — механизм, обрабатывающий асинхронные задачи в Node.js) измеряли по таймеру, что давало приближённую картину. Новый режим снимает реальные показания libuv на каждой итерации цикла, а не через фиксированные интервалы.

Для диагностики это ощутимая разница: всплески задержек, из-за которых сервис «подтормаживает» под нагрузкой, теперь видно точнее, и их проще привязать к конкретным участкам кода. Изменение предложил Пабло Эрхард (Pablo Erhard).

Что ускорили под капотом

Помимо новых API, релиз заметно оптимизирует внутреннюю кухню. Метод TextEncoder.encode() перестал копировать исходную строку — это снижает нагрузку на память и ускоряет кодирование, особенно на «горячих» путях обработки текста (автор — Ягыз Низипли, Yagiz Nizipli). Реализация WHATWG-потоков уменьшила накладные расходы на каждый чанк. А REPL (интерактивная консоль Node.js) стал стартовать быстрее за счёт ленивой загрузки парсера acorn и отложенного создания контекста виртуальной машины (Дайдзиро Ваки, Daijiro Wachi).

Вошли и штатные исправления безопасности и стабильности — в частности, в криптографии (валидация больших генераторов Диффи — Хеллмана и проверка точек EdDSA) и в обработке сигналов прерывания у потоков.

Стоит ли обновляться

Node.js 26.5.0 — релиз ветки Current, поэтому у него две аудитории. Тем, кто разрабатывает инструменты, экспериментирует с потоками и хочет пораньше пощупать импорт текста, обновление даёт заметный набор удобств прямо сейчас. Тем, кто держит продакшен на текущем LTS (сейчас это линейка Node.js 24), спешить необязательно: экспериментальные флаги ещё могут поменять поведение, а сама ветка станет LTS только к октябрю. Разумная стратегия — обкатать новинки в тестовом окружении и на CI, чтобы к моменту перехода 26-й версии в LTS уже понимать, какие из возможностей вы готовы включить в боевую сборку.

Частые вопросы

Q.Когда Node.js 26 станет LTS?

По графику проекта Node.js 26 (чётная мажорная версия) должен перейти в статус LTS в октябре 2026 года. До этого момента 26.x — это ветка Current, где обкатываются новые API. Текущий LTS на момент выхода 26.5.0 — линейка Node.js 24.

Q.Как включить импорт текстовых файлов?

Нужно запустить Node.js с экспериментальным флагом --experimental-import-text, после чего .txt-файл можно импортировать через синтаксис атрибутов импорта: import readme from './readme.txt' with { type: 'text' }. Возможность экспериментальная и в продакшене пока не рекомендуется.

Q.Чем textStream() лучше метода text() у Blob?

Метод text() загружает всё содержимое Blob в память целиком, а textStream() возвращает ReadableStream строк и позволяет читать данные по частям. Для больших файлов это снижает потребление памяти и даёт возможность обрабатывать текст по мере поступления.

Q.Зачем нужен отчёт о TLS-группе в getEphemeralKeyInfo()?

Он показывает, какая группа ключевого обмена согласована при TLS-рукопожатии, включая пост-квантовые ML-KEM и гибридные схемы. Это позволяет из кода или мониторинга убедиться, что соединения используют квантово-устойчивый обмен ключами, и заметить откат на классические алгоритмы.

Источники

Предыдущая
JADEPUFFER: первый ransomware, который целиком провёл ИИ-агент

Читайте также

Аналитик кибербезопасности со спины наблюдает голограмму автономного ИИ-агента, атакующего зашифрованную базу данных, в тёмном центре мониторингаCyber News
13 июля 2026 г.

JADEPUFFER: первый ransomware, который целиком провёл ИИ-агент

Sysdig задокументировала JADEPUFFER — первую атаку-вымогатель, где весь путь от взлома Langflow до шифрования базы данных прошёл автономный ИИ-агент, а не человек. Разбираем цепочку атаки, доказательства автономности и практическую защиту.

Читать →
Профессионал взаимодействует с голографическим интерфейсом ChatGPT: слева переключатель из трёх режимов с активной верхней вкладкой, справа ИИ-агент собирает документы, слайды и веб-приложениеCyber News
12 июля 2026 г.

OpenAI выпустила GPT-5.6 и агента ChatGPT Work: Codex переехал внутрь приложения ChatGPT

9 июля 2026 OpenAI анонсировала «следующую главу» ChatGPT: семейство моделей GPT-5.6 (Sol, Terra, Luna), рабочего агента ChatGPT Work и объединение Codex с основным приложением ChatGPT. Разбираем, что изменилось и почему это важно разработчикам и бизнесу.

Читать →
Аналитик кибербезопасности в тёмном операционном центре наблюдает голографическую карту сети из тысяч взломанных сайтов с тревожными маркерами, сходящимися к одному вредоносному серверуCyber News
12 июля 2026 г.

WP-SHELLSTORM: открытый сервер атакующих раскрыл массовый взлом WordPress-сайтов через дыру в Breeze

Исследователи SOCRadar нашли в открытом доступе рабочий инструментарий киберпреступной группы: 1,4 млн целей, тысячи установленных веб-шеллов и 27 использованных уязвимостей. Главным «пробойником» стала критическая дыра CVE-2026-3844 в кэширующем плагине Breeze. Разбираем, как устроена атака и что делать владельцам сайтов.

Читать →