The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступна JavaScript-платформа Node.js 22.0.0

25.04.2024 08:44

Состоялся релиз Node.js 22.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 22.0 отнесён к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 22.x будет осуществляться до 30 апреля 2027 года. Сопровождение прошлой LTS-ветки Node.js 20.x продлится до апреля 2026 года, а позапрошлой LTS-ветки 18.x до апреля 2025 года. Сопровождение промежуточной ветки Node.js 21.x будет прекращено 1 июня 2024 года.

Основные улучшения:

  • Движок V8 обновлён до версии 12.4, применяемой в Chromium 124. Из изменений по сравнению с веткой Node.js 21, в которой использовался движок V8 11.8), отмечается:
    • Поддержка расширения WasmGC, упрощающего портирование в WebAssembly программ, написанных на языках программирования, использующих сборщик мусора (Kotlin, PHP, Java и т.п.). WasmGC добавляет новые типы структур и массивов, для которых может применяться нелинейное выделение памяти.
    • Поддержка метода Array.fromAsync(), в асинхронном режиме возвращающего новый экземпляр объекта Array, скопированный из объектов, напоминающих массив, перечисляемых (iterable) или асинхронно перечисляемых (async iterable).
    • Поддержка методов для работы с итераторами, таких как .map, .filter, .find, .take, .drop, .forEach и .reduce.
    • Поддержка объекта Set, определяющего коллекцию значений и предлагающего методы с реализацией типовых операций работы с множествами, таких как пересечения, объединения, разность и дополнение.
  • Включён по умолчанию оптимизирующий JIT-компилятор Maglev, нацеленный на быструю генерацию высокопроизводительного машинного кода для активно используемого кода на JavaScript. Включение Maglev позволяет заметно ускорить работу короткоживущий CLI-приложений, не выполняющих длительных операций, например, время прохождения теста Jetstrea сокращается на 7.5%, а теста Speedometer на 5%.
  • Ускорена работа с потоками за счёт увеличения значения опции highWaterMark с 16 KB до 65 KB (определяет лимит, до которого выполняется буферизация записи). Изменение приводит к увеличению потребления памяти, поэтому приложениям, рассчитанным на работу с ограниченным объёмом ОЗУ, возможно потребуется вернуть старое значение через вызов setDefaultHighWaterMark().
  • Повышена производительность API fetch() и test runner за счёт повышения эффективности создания экземпляров AbortSignal. Повышена производительность API, связанных с синхронной работой с файловыми системами.
  • Предоставлена экспериментальная возможность использования вызова "require()" для загрузки JavaScript-модулей ESM (ECMAScript Modules) в синхронном режиме. ESM-модули применяются в браузерах и идут на смену модулям CommonJS, специфичным для Node.js. Для загрузки через "require()" ESM-модуль должен выполняться в синхронном режиме (без await на верхнем уровне). Поддержка включается через флаг "--experimental-require-module".
  • Добавлена экспериментальная возможность запуска скриптов, определённых в файле package.json, используя команду "--run <script-in-package-json>".
  • В категорию стабильных переведена команда "node --watch" с реализацией режима наблюдения, обеспечивающего перезапуск процесса при изменении импортированного файла (например, в случае выполнения "node --watch index.js" процесс будет автоматически перезапущен при изменении index.js).
  • Стабилизирована встроенная реализация API WebSocket, позволяющего использовать WebSocket в режиме клиента без установки дополнительных зависимостей.
  • Добавлена частичная поддержка API Navigator.
  • В API Webstreams добавлена поддержка формата сжатия deflate-raw.
  • В модуль node:fsmodule добавлены функции glob и globSync для сопоставления файловых путей по образцу.
  • Улучшена обработка некорректно настроенных стеков IPv6. Реализован алгоритм Happy Eyeballs для быстрого отката в случае проблем с работой IPv6.
  • Объявлен устаревшим API util.
  • Обновлены версии зависимостей: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson to 3.8.0, ada 2.7.7 и undici 6.6.0.

Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.

Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe).

Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core). По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере.


  1. Главная ссылка к новости (https://nodejs.org/en/blog/rel...)
  2. OpenNews: Уязвимости в Node.js и libuv
  3. OpenNews: Доступна JavaScript-платформа Node.js 21.0
  4. OpenNews: Доступна серверная JavaScript-платформа Bun 1.0, более быстрая, чем Deno и Node.js
  5. OpenNews: Атака на Node.js через манипуляции с прототипами объектов JavaScript
  6. OpenNews: Автор Node.js представил защищённую JavaScript-платформу Deno 1.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/61067-node.js
Ключевые слова: node.js, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:30, 25/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –11 +/
    Это уже легаси. Deno же есть.
     
     
  • 2.2, Максимка (??), 10:37, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Deno - не нужен
    Потому что нет совместимости с нодой

    Bun интересный эксперимент

    однако для прода Node.js будет стандартным решением ибо давно обкатано

     
     
  • 3.7, Аноним (7), 10:50, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Дено бай дизайн неюзабельная штука даже если его использовать самостоятельно. А не как совместимость.
     
  • 2.4, Аноним (7), 10:45, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Только нет ниодного реального человека который бы в реальности использовал дено вместо ноды.
     
  • 2.13, Аноним (13), 11:35, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Когда появляется новый язык/рантайм/whatever, я всегда проверяю одну вещь: позволяет ли этот язык работать с файлами, название которых не является валидной UTF-строкой. Так вот: Node.js -- позволяет, имя файла может быть буфером. Питон -- позволяет, имя файла может быть буфером. А вот дено -- сюрприз! -- нет. В дено имя файла -- это либо строка, либо URL. Это означает, что:

    Дено не дает тебе надежного способа прочитать список файлов в папке, если один из этих файлов имеет название, не являющееся валидной UTF-строкой. Другие языки и рантаймы -- позволяют.

    Дено -- это детский рантайм, который и для одноразовых скриптов-то еле годится.

     
     
  • 3.17, Аноним (17), 13:16, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ок, допустим новый язык позволяет работать с файлами, к-е на являются валидной UTF-строкой. Но больше этот ЯП ничего не умеет, только вот работать с такими файлами и всё... Норм язык?
     
     
  • 4.18, Аноним (13), 13:23, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Если этот язык планирует расширять остальную часть своей стд-либы -- да. А если аффтар не догадывается о существовании такого концепта, как OsString, то его стд-либа навсегда останется плюшевой.
     
  • 4.23, ляляля (?), 15:25, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Но больше этот ЯП ничего не умеет, только вот работать с такими файлами и всё... Норм язык?

    Этот вопрос можно более глобально экстраполировать: в вин11 ввели рекламу в "Пуске", которую можно выключить -- нужно срочно брать норм дистрибутив, и натягивать функции, которых не хватает, зато без потенциальной рекламы, стать мастером настройки сети (но не порезать телеметрию).

     
  • 3.22, Аноним (22), 15:22, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что значит "имя файла может быть буфером"?
     
     
  • 4.24, Аноним (17), 15:25, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Да черт его поймет что этот ноуджыэсник имеет ввиду
     
  • 4.25, ляляля (?), 15:26, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    это значит широкие возможности, т.е. еще большее поле для уязвимостей
     
  • 4.28, Аноним (13), 15:38, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А что значит "имя файла может быть буфером"?

    Привет, недавно в айти? Имя файла -- это бинарные данные. В си это массив char, в питоне это массив byte, а в GLib различают name и display name -- реальное имя файла и имя файла, показываемое пользователю в гуе, например "???.pdf (некорректная кодировка)". В плюшевых языках/рантаймах аффтары норовят ее сделать строкой или даже урлом. Это значит, что если ты задумаешь написать на таких языках файловый менеджер, то он тебе покажет, что такая-то папка пустая, хотя там можешь быть куча файлов с невалидной UTF-строкой в названии.

     
     
  • 5.30, Аноним (17), 15:52, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Привет, недавно в айти?

    Привет. Нет, я давно в айти. А ты недавно? По чем щас курсы скиллбокса?

    > Имя файла -- это бинарные данные

    Все в компухтере - бинарные данные. И имя файла, и PNG, и MP4.

    > задумаешь написать на таких языках файловый менеджер, то он тебе покажет, что такая-то папка пустая, хотя там можешь быть куча файлов с невалидной UTF-строкой в названии

    Ты точно недаво в айти, если не знаешь как это обойти

     
     
  • 6.32, Аноним (13), 16:09, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > По чем щас курсы скиллбокса?

    Не знаю, узнавай у скиллбокса. Отпишись, как пройдешь!

    > Все в компухтере - бинарные данные. И имя файла, и PNG, и MP4.

    Ага, но с точки зрения плюшевых рантаймов (в том числе дено), имя файла -- это не просто бинарные данные, а бинарные данные, обязательно являющиеся валидной UTF16-последовательностью. То, что далеко не все файловые системы это форсируют, тебе не известно. То, что по I/O тебе могут прийти любые последовательности символов (а readdir -- это тоже I/O) -- тебе тоже не известно. Обязательно отпишись, рассказывают ли про это в скиллбоксе! Или можешь сам мне лично сказать, когда будешь пробивать мне товары на кассе в пятерочке.

     
     
  • 7.33, Аноним (17), 16:25, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Клован, у нас в Кипре нет пятерочек :) Но есть Alphamega, это примерно то же самое, но врядли ты там окажешься даже в качестве покупателя, тем более я там не работаю.

    > То, что по I/O тебе могут прийти любые последовательности символов (а readdir -- это тоже I/O) -- тебе тоже не известно

    Ахахахаха. Уважаемый кассир пятерочки, я работаю в железячной компании и пишу кастомную ФС для ядра, а не надрачиваю на какие-то deno, python'ы и нодыжыэсы :)

     
     
  • 8.34, Аноним (13), 16:39, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это не беда, ты всегда можешь устроиться работать в аналогичную сеть магазинов ... текст свёрнут, показать
     
     
  • 9.35, Аноним (17), 16:46, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Я где-то и когда-то говорил, что обязано Ты в этом своём неплюшевом языке не мо... текст свёрнут, показать
     
     
  • 10.36, Аноним (13), 17:08, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ты или Аноним 22 задал наивный детский вопрос про то, что означает фраза имя ... текст свёрнут, показать
     
     
  • 11.37, Аноним (37), 17:12, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    да это не я был Нас просто легион... текст свёрнут, показать
     
  • 11.38, Аноним (37), 17:13, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И, кстати, не пользуюсь Наверно надо уже начинать, но еще ни разу не юзал... текст свёрнут, показать
     
  • 11.40, Аноним (37), 17:41, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    И да, мне наверно не стоило отвечать на твое недавно в айти , если это было не... текст свёрнут, показать
     
  • 11.42, Аноним (42), 18:13, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Дружище, я задал тебе нормальный вопрос Мне правда стало интересно, что ты имее... текст свёрнут, показать
     
     
  • 12.43, Аноним (37), 20:06, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Да какой он тебе дружище, Друг Какой-то эникейщик выучил немного нодыжс, теп... текст свёрнут, показать
     
  • 3.26, Аноним (26), 15:34, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Т.е. вместо того, чтобы донести на ИТ-террориста, ты играешь в его игру по его правилам?
     
  • 3.27, Аноним (27), 15:34, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >я всегда проверяю одну вещь: позволяет ли этот язык работать с файлами, название которых не является валидной UTF-строкой

    Анекдот про звонок на спичечную фабрику

     
     
  • 4.29, Аноним (13), 15:45, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Сишный ls покажет тебе, что в папке куча многогигабайтных файлов. А теперь войди в repl своего плюшевого рантайма и сделай readdir той же самой папки. Плюшевый язык/рантайм, форсирующий строки в названиях файлов, скажет тебе, что папка пустая. Да такую ерунду, не умеющую толком в I/O, даже в хелловорлдах стремно использовать, не то, что в одноразовых скриптах.
     
     
  • 5.49, Аноним (27), 16:08, 27/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Чел, да ты реально крутой. Плюшевый язык/рантайм форсирует строки в названиях, а ты туда случайных байтов насыпал! А? Каково? Ух хитрец, ух язва! Сам читаешь, а другие-то и не знают как. Молодец!
     
  • 3.41, Vlad Violentiy (-), 17:42, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем вообще может понадобится работа с файлами, название которых это не валидная utf строка?
     
     
  • 4.45, Аноним (45), 09:21, 26/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    например чтобы переименовать
     
     
  • 5.46, Аноним (46), 22:25, 26/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Можно просто сразу аккуратно работать и не давать подливы чтобы потом усираться с исправлениями, если ваши вкусы не специфичны конечно же..
     
     
  • 6.50, Аноним (50), 17:14, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Сбой устройства, как следствие сбой фс, как следствие частичная потеря данных файлов.

    Во времена переносных hdd один из таких упал сантиметров с десяти. Как итог: данные частично восстановил с помощью спецсофта. Многие файлы были побиты, не говоря уже про имена файлов (абракадабра отдыхает).

    Плюс к этому не забываем про кривой софт.

     
  • 4.48, Молодой Смузихлёб (?), 13:31, 27/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Раньше программы падали если директория пользователя названа кириллицей, ибо про другие кодировки кроме ASCII не хотели знать. Сейчас падают если полный путь содержит невалидную UTF-строку.

    Дело в надёжности

     
  • 2.20, Аноним (20), 14:14, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Deno же есть.

    Это где модули импортируются по урл из интернета?

     
  • 2.21, ляляля (?), 15:12, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Легаси это бандлы, скомпиленные вчера.
    Нужно срочно бросить разработку новых функций и исправление багов, запускать npm update -g и прочие команды, править конфиги сборки, подгонять проект по собираемость и "неуязвимость", и чтобы еще мейнтейнеры 500 зависимых пакетов тоже успели сделать то же самое к этому моменту, причем, одновременно, иначе старое не соберётся с полуновыми зависимостями.
     

  • 1.3, Бывалый Смузихлёб (ok), 10:42, 25/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > дополнительно Microsoft развивает вариант Node.js
    > с движком Chakra-Core

    это не та чакра, которую даже сам микрософт не использует в своём свежем эдже ?

     
     
  • 2.6, Аноним (7), 10:49, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ты бы ещё про spidernode вспомни. Не надо я уже вспомнил.
     

  • 1.11, Аноним (11), 11:28, 25/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Я так понимаю, это первый рантайм в породе с поддержкой wasmgc из коробки. Штош, докеру с их wasmEdge стоит пошевелиться.
     
     
  • 2.15, Максимка (??), 11:48, 25/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    соглашусь
     

  • 1.47, Вы забыли заполнить поле Name (?), 02:09, 27/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  Для создания пула потоков (thread pool) задействована библиотека libeio

    Пул потоков в libuv реализован без сторонних библиотек.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру