Node.js 26.5.0 без поспіху: перевіряємо текстові імпорти, цикл подій і TLS

Node.jsспостережуваністьTLS

Практична лабораторна перевірка трьох змін у Node.js 26.5.0 Current без оновлення production: експериментальних текстових імпортів, нового режиму вимірювання затримки циклу подій і видимості узгоджених TLS-груп

Коли посилання на реліз — ще не план оновлення

У командному чаті з’являється посилання на Node.js 26.5.0, а перше корисне питання звучить не «як оновити?», а «чи є тут щось для нашого сервісу?». Реліз від 8 липня 2026 року належить до Current-гілки. Це добра ціль для лабораторії, але не автоматична заміна робочої LTS.

Замість огляду всього журналу змін перевіримо три конкретні сигнали: текстовий імпорт, два режими вимірювання затримки циклу подій і результат getEphemeralKeyInfo() для TLS-груп. Мета — отримати відтворювані нотатки, не торкаючись production.

Умова безпечного досліду

Встановіть Node.js 26.5.0 через менеджер версій або в окремому контейнері. Не замінюйте системну версію й не змінюйте образ сервісу. На початку журналу збережіть:

node --version
node -p "process.platform + ' ' + process.arch"
node -p "process.versions.openssl"

Очікувана перша відповідь — v26.5.0. Використовуйте окремий каталог без production-конфігурації. Для чесного порівняння запускайте однаковий сценарій на тому самому комп’ютері, без паралельних важких задач.

Запис 1. Текстовий файл як модуль

Створіть файл message.txt із кількома рядками, не-ASCII символами та порожнім рядком. Поруч створіть import-text.mjs:

import message from './message.txt' with { type: 'text' };

console.log(JSON.stringify(message));

Запустіть дослід:

node --experimental-import-text import-text.mjs

Перевірте, чи збереглися переноси рядків і символи, а потім повторіть запуск без прапорця. Текстовий імпорт у цьому релізі експериментальний, тому прапорець є важливою частиною контракту. Окремо перевірте тестовий раннер, пакувальник і статичний аналізатор: підтримка в Node.js не означає підтримку всім ланцюжком інструментів.

Анти-патерн — одразу будувати на цій можливості завантажувач production-конфігурації. Безпечніший перший кандидат — невеликий внутрішній інструмент або тестова фікстура.

Запис 2. Два погляди на затримку циклу подій

monitorEventLoopDelay() і раніше будував гістограму затримок. У 26.5.0 можна явно ввімкнути samplePerIteration: true, щоб брати зразок на кожній ітерації циклу подій. Без цього параметра попередня поведінка зберігається.

import { monitorEventLoopDelay, performance } from 'node:perf_hooks';

const perIteration = process.argv.includes('--per-iteration');
const options = perIteration
  ? { samplePerIteration: true }
  : { resolution: 10 };

const histogram = monitorEventLoopDelay(options);
histogram.enable();

const blocker = setInterval(() => {
  const until = performance.now() + 35;
  while (performance.now() < until) {}
}, 200);

setTimeout(() => {
  clearInterval(blocker);
  histogram.disable();
  console.log({
    mode: perIteration ? 'per-iteration' : 'interval',
    p50ms: histogram.percentile(50) / 1e6,
    p99ms: histogram.percentile(99) / 1e6,
    maxMs: histogram.max / 1e6
  });
}, 3000);

Запустіть режими окремо:

node delay.mjs
node delay.mjs --per-iteration

Не порівнюйте числові значення двох режимів напряму: вони використовують різні способи вибірки й закономірно дають різні розподіли. Для кожного режиму окремо запишіть 50-й і 99-й перцентиль, стабільність повторів та витрати процесора, а потім оцініть, який сигнал відповідає вашому завданню спостереження. Це не універсальний тест продуктивності. Не запускайте обидві гістограми одночасно: саме вимірювання може вплинути на результат.

Запис 3. Що повідомляє TLS-з’єднання

У контрольованому тесті клієнтський TLSSocket може показати дані про узгодження ключів. У 26.5.0 getEphemeralKeyInfo() також може повернути тип TLSGroup, коли OpenSSL не надає звичного об’єкта тимчасового ключа для узгодженої групової схеми. Це стосується, зокрема, новіших постквантових і гібридних варіантів, якщо їх фактично узгодили сторони.

import tls from 'node:tls';

const host = process.env.TLS_HOST;
if (!host) throw new Error('Set TLS_HOST');

const socket = tls.connect({
  host,
  port: Number(process.env.TLS_PORT || 443),
  servername: host,
  minVersion: 'TLSv1.3'
}, () => {
  console.log(socket.getProtocol());
  console.log(socket.getEphemeralKeyInfo());
  socket.end();
});

socket.on('error', console.error);

Результат залежить від клієнта, сервера, OpenSSL і фактично узгодженої TLS-групи. Відсутність TLSGroup не доводить наявність проблеми. Так само одна назва групи не є повною перевіркою політики безпеки. Спочатку використовуйте ці дані для діагностики та журналювання.

Рішення після лабораторії

  • Спостерігати: зміна не стосується сервісу, інструменти її ще не підтримують або результат не дає практичної користі.
  • Тестувати: є конкретний сценарій, повторюваний виграш і можливість додати перевірку в CI без зміни робочого середовища.
  • Впроваджувати: сумісність залежностей підтверджена, навантажувальні тести пройдено, політика команди дозволяє цю версію, а відкат перевірено.

Три короткі досліди не перетворюють Current-реліз на LTS. Вони роблять важливіше: замінюють загальне враження вимірюваним рішенням для конкретного сервісу.

Джерела

Короткий чеклист

  • встановити Node.js 26.5.0 в окремому середовищі
  • записати версії Node.js, ОС та OpenSSL
  • запустити кожен дослід окремо
  • зберегти команди, вихідні дані та результати
  • не використовувати production-секрети й сертифікати
  • сформулювати рішення та умови відкату

План безпечної перевірки нового релізу Node.js

Допоможи оцінити новий Current-реліз Node.js без оновлення production. Спочатку запроси такі вхідні дані: 1. Поточна версія Node.js і цільова тестова версія. 2. Операційна система, архітектура та версія OpenSSL. 3. Тип сервісу і спосіб запуску тестів у CI. 4. Які можливості релізу стосуються сервісу. 5. Поточні метрики затримки циклу подій і допустиме навантаження тесту. 6. Наявність контрольованого TLS-сервера. Поверни результат у форматі: - межі та припущення досліду; - ізольоване середовище; - команди й мінімальні тестові файли; - очікувані та фактичні спостереження; - ризики й анти-патерни; - рішення для кожної можливості: спостерігати, тестувати або впроваджувати; - умови зупинки та відкату. Не рекомендуй production-оновлення без порівняння, сумісності залежностей і плану відкату.