LINUX.ORG.RU

Опубликована платформа Node.js 26.0.0

 ,


0

2

Состоялся релиз Node.js 26.0.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 26.0 отнесён к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 26.x будет осуществляться до мая 2029 года. Сопровождение прошлой LTS-ветки Node.js 24.x будет осуществляться до 30 апреля 2028 года, а позапрошлой 22.x - до 30 апреля 2027 года. Сопровождение LTS-ветки 20.x прекращено 30 апреля 2026 года, а промежуточной ветки Node.js 25.x будет прекращено 1 июня 2026 года.

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

  • Включён по умолчанию API Temporal, предлагающий альтернативный набор методов для работы с датами и временем. API позволяет манипулировать датами с учётом и без учёта часовых поясов, конвертировать время, форматировать вывод и выполнять арифметические операции со временем. Время может задаваться в независимом от часового пояса представлении (Temporal.PlainDate, Temporal.PlainTime, Temporal.PlainDateTime), с привязкой к часовому поясу (Temporal.ZonedDateTime) и в эпохальном представлении (Temporal.Instant - число наносекунд с 1 января 1970 года).
  • Движок V8 обновлён до версии 14.6, применяемой в Chromium 146. Из улучшений по сравнению с прошлым выпуском Node.js отмечена возможность объединять несколько итераторов в один с помощью метода Iterator.concat(), а также реализация спецификации «upsert» для упрощения работы с коллекциями пар ключ/значение в JavaScript-объектах Map и WeakMap. HTTP-клиент undici обновлён до ветки 8.x (github.com).
  • Удалён метод http.Server.prototype.writeHeader(), вместо которого следует использовать http.Server.prototype.writeHead().

Платформа 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 (google.com). По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python asyncio и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере.

>>> Источник

★★★

Проверено: hobbit ()
Последнее исправление: cetjs2 (всего исправлений: 3)

js

Господи! Спаси, укроти, примири!

seiken ★★★★★
()

Ant: создание среды выполнения JavaScript за один месяц:

Why Ant?

AntNodeBunDeno
Binary size~9 MB~120 MB~60 MB~90 MB
Cold start~5 ms~31 ms~13 ms~25 ms
EngineAnt SilverV8JSCV8
JIT
WinterTC conformantpartial

Cold start

RuntimeMeanMinMaxRelative
Ant5.7 ms5.0 ms7.3 ms1.00
Bun12.8 ms11.6 ms16.4 ms2.24× slower
Deno24.8 ms22.2 ms29.4 ms4.32× slower
Node31.1 ms27.1 ms151.7 ms5.41× slower
dataman ★★★★★
()
Ответ на: комментарий от dataman

Сразу с козырей зашел, надо было подождать пока срачь разгорится, а потом вкидывать)

ptah_alexs ★★★★★
()
Последнее исправление: ptah_alexs (всего исправлений: 1)
Ответ на: комментарий от dataman

Во-первых, кого вообще волнует cold start в жабаскрипте? Во-вторых, а где сравнение с just-js, если уж пытаться в писькомерство.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

кого вообще волнует cold start в жабаскрипте?

Да практически всех.

Консольные утилиты (и не консольные) должны стартовать быстро. Вот банально я vscode запускаю. Он же весь на жаваскрипте написан. И хочется, чтобы он как можно быстрей на экране всё запустил и нарисовал.

Всяческие лямбда-функции должны стартовать быстро.

Даже традиционные серверные приложения желательно стартовать побыстрей нынче.

В Java вон ради ускорения старта пытаются всяческие технологии выдумывать. В разных направлениях двигаются. Пытаются в нативный код компилировать. Пытаются состояние виртуальной машины после инициализации сохранять в файл и потом восстанавливать, чтобы стартовать уже в инициализированном виде. Много усилий тратят (и по-мне всё как-то вхолостую).

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от vbr

Много усилий тратят (и по-мне всё как-то вхолостую).

Потому что всем заинтересованным лицам насрать, стартует ли long-running corporate web-service на древнем Спринге 1 минутут или 5. А если даже что-то отвалится в процессе, кубер просто активирует другую ноду на дорогущих Эпиках.

А IDE, как и браузер, закрывается только когда надо с нового обновлённого ядра десктоп разраба перезагрузить. Т.е. пофиг.

И как бы вот, node.js в ту же нишу хочет.

seiken ★★★★★
()
Ответ на: комментарий от vbr

Консольные утилиты

А ты вот прямо заметишь разницу при запуске консольной утилиты между 30мс и 5мс?

Всяческие лямбда-функции должны стартовать быстро

Они крутятся в VM. Только ты этого не видишь. Там нет холодного старта каждый раз.

Даже традиционные серверные приложения желательно стартовать побыстрей нынче

Вопрос про 30мс и 5мс повторяется

Java вон ради ускорения старта пытаются всяческие технологии выдумывать

Если бы java стартовала на холодную за 30мс там все прыгали бы до потолка – прорыв века!

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от seiken

Потому что всем заинтересованным лицам насрать, стартует ли long-running corporate web-service на древнем Спринге 1 минутут или 5. А если даже что-то отвалится в процессе, кубер просто активирует другую ноду на дорогущих Эпиках.

Нет, не насрать. Если у меня пошла нагрузка, мне надо, чтобы новый инстанс стартовал как можно быстрей. Если нагрузка спала, я хочу завершить все ненужные инстансы. Это экономия денег. На масштабе - существенная.

А IDE, как и браузер, закрывается только когда надо с нового обновлённого ядра десктоп разраба перезагрузить. Т.е. пофиг.

Глупости. Я каждый день запускаю и IDE и браузер. И часто много раз.

И как бы вот, node.js в ту же нишу хочет.

В ту же нишу node.js вряд ли попадёт. Как бы они ни выпендривались, у всего есть границы. И молоть байты Java, Golang, C# будут быстрей. У них реализация изначально проектировалась с учётом производительности. А JS проектировался, просто чтобы в браузере скриптик запустить. То, что V8 делает, уже можно считать чудом, но до конкурентов не дотягивает и не дотянет. Поэтому надо давить на сильные стороны. И скорость старта в их числе, т.к. это то, что и в вебе важно.

vbr ★★★★★
()
Ответ на: комментарий от no-such-file

А ты вот прямо заметишь разницу при запуске консольной утилиты между 30мс и 5мс?

Может и замечу. Даже если не замечу, через time замеряю и потом буду носом крутить.

Всяческие лямбда-функции должны стартовать быстро

Они крутятся в VM. Только ты этого не видишь. Там нет холодного старта каждый раз.

При чём тут каждый раз? Весь смысл их в том, чтобы можно было их масштабировать очень быстро, от нуля до условной бесконечности. И ноль тут очень важен. Т.к. ноль это нулевое потребление ресурсов и денег. При этом, когда запрос таки приехал, также очень важно всё запустить максимально быстро. Важно на всех уровнях. Виртуальную машину запустить хотя бы за десятки миллисекунд, но и после этого надо сам код запускать тоже очень быстро, чтобы в итоге запрос отработал быстро. Когда нет холодного старта - это никому не интересно. Интересен именно холодный старт.

Вопрос про 30мс и 5мс повторяется

Чем быстрей, тем лучше. Желательно за 0 мс.

Если бы java стартовала на холодную за 30мс там все прыгали бы до потолка – прорыв века!

Ну со всеми этими новыми технологиями вроде может. Но там другие неудобства возникают. Например когда я пытался одно свое приложение через graalvm скомпилировать, у меня на CI сервере тупо оперативной памяти не хватило. И компиляция идёт очень долго. И размер артефакта неприлично большой. В общем я решил, что оно мне не надо. Там где надо - лучше на go напишу.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Может и замечу

Нет, не заметишь. Более того практического смысла в этом никакого нет.

через time

При таких интервалах он тебе херю покажет. Это можно только статистически обнаружить.

Весь смысл их в том, чтобы можно было их масштабировать очень быстро, от нуля до условной бесконечности

Ещё раз для тех кто в бронепоезде. Там не происходит холодного старта при «масштабировании». По факту там инстанс крутится всегда, а плата берётся за использование CPU. Если текущей VM будет мало и нужно будет новую стартовать, то это займёт на много порядков больше времени чем старт собственно функции.

Желательно за 0 мс

Это будет стоить 1/0 денег.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Нет, ты не прав и оно работает совсем не так.

vbr ★★★★★
()
Ответ на: комментарий от vbr

Нет, не насрать. Если у меня пошла нагрузка, мне надо, чтобы новый инстанс стартовал как можно быстрей.

Ну вообще говоря, сервис сервису рознь. Бесшовная балансировка не всегда обязательна везде. Во внутрь корпоративной среде есть системы ответов техподдержки и нужные люди всегда на стрёме 24х7х360. И если софт без багов и грамотно спроектирован, в тикете просто напишут «всё в порядке, идёт загрузка». Или по мылу отпишут.

seiken ★★★★★
()

отмечена возможность объединять несколько итераторов в один с помощью метода Iterator.concat()

Вау. Того и гляди, скоро запилят нормальные обобщённые reduce, map и filter, не прибитые гвоздями к массивам. А там и до трансдьюсеров недалеко/

Впрочем, ждать не обязательно — в Clojure(Script) это всё есть уже давно. И много чего ещё, о чём ванильные жопаскриптеры могут только влажно мечтать, яростно теребя свои фичреквесты %)

Например, стандартная библиотека.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от vbr

кого вообще волнует cold start в жабаскрипте?

Да практически всех

Наверное, это так. Но TANSTAAFL не обманешь — за быстрый старт, скорее всего, придётся чем-то расплачиваться — скоростью работы, фичами, чем-то ещё.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Как бы то ни было, главная платформа для JS это веб. То бишь браузер. Все эти ноды и буны паразитируют на движках, выковырянных из браузеров. А в браузере быстрый старт, безусловно, нужен. Современные сайты могут грузить мегабайты джаваскрипта, и быть полностью непригодными для использования без его запуска. И их нужно все распарсить и выполнить как можно скорей, чтобы пользователь поскорей увидел сайт. Поэтому браузерные движки оптимизируют под быстрый старт и логично, что и серверные платформы на их основе будут стартовать относительно быстро. А расплачиваться, видимо, будут общей производительностью. Быстрый старт подразумевает отсутствие сложных оптимизаций. Если оптимизации и будут сделаны, то уже после старта, и это тоже будет замедлять производительность.

Впрочем не думаю, что от JS кто-то ждёт большой производительности.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

В Java вон ради ускорения старта пытаются всяческие технологии выдумывать.

И всё равно решает память.

Shadow ★★★★★
()
Ответ на: комментарий от vbr

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

Сколько? Сколько раз можно повторять, что JS и Node.js — это совершенно разные платформы? У браузера есть DOM, у Node.js DOM нету. Они решают разные задачи в разном окружении.

Может быть браузеры и оптимизируют под быстрый старт, только они по итогу еле ползают. 1.5 секунды First Contentfull Paint — это считается хороший результат. Естественно, это при условии, что браузер уже запущен заранее, потому что если не запущен, то будь добр ещё 5-10 секунд подождать.

Если бы в таком темпе работали сайты на ноде, то ноду наконец бы закопали уже.

byko3y ★★★★★
()
Ответ на: комментарий от byko3y

Сколько? Сколько раз можно повторять, что JS и Node.js — это совершенно разные платформы? У браузера есть DOM, у Node.js DOM нету. Они решают разные задачи в разном окружении.

JavaScript там и там. Если надо будет обрабатывать XML или HTML, то DOM появится. И совершенно разные платформы это броузер и Node.js а не JavaScript и Node.js. JavaScript — язык программирования а не какая–то там платформа.

wenxuan
()
Последнее исправление: wenxuan (всего исправлений: 1)
Ответ на: комментарий от vbr

Современные сайты могут грузить мегабайты джаваскрипта, и быть полностью непригодными для использования без его запуска.

Это ложь. Божествення неблокирующая природа асинхронности JavaScript и гениальная идея грузить джейсоны из скриптов с помощью десятков и сотен неблокирующих асинхронных запросов чтобы потом перегонять их в кусочки HTML чтобы потом встроить их в DOM не позволяют быть страницами непригодными. Строго наоборот. Они из–за этого только убыстряются.

wenxuan
()
Ответ на: комментарий от Nervous

Вау. Того и гляди, скоро запилят нормальные обобщённые reduce, map и filter, не прибитые гвоздями к массивам.

Iterator.prototype.map() and friends разве не оно?

drsm ★★
()
Ответ на: комментарий от dataman

Ant: создание среды выполнения JavaScript за один месяц:

этоже днище, модуля fs достаточно исходник посмотреть…

quickjs

или njs если нужен cold start

drsm ★★
()
Ответ на: комментарий от vbr

Нет, не насрать. Если у меня пошла нагрузка, мне надо, чтобы новый инстанс стартовал как можно быстрей. Если нагрузка спала, я хочу завершить все ненужные инстансы. Это экономия денег. На масштабе - существенная.

Проблемы нищебродов никого не волнуют.

firkax ★★★★★
()
Ответ на: комментарий от drsm

Iterator.prototype.map() and friends разве не оно?

Почти. Вот если бы это было Iterable.prototype.map() — было бы совсем оно.

Nervous ★★★★★
()
Ответ на: комментарий от drsm

quickjs

Это просто «движок», а не «платформа».

dataman ★★★★★
()
Ответ на: комментарий от wenxuan

JavaScript там и там. Если надо будет обрабатывать XML или HTML, то DOM появится. И совершенно разные платформы это броузер и Node.js а не JavaScript и Node.js. JavaScript — язык программирования а не какая–то там платформа.

Согласен. Node.js - это новая перспективная платформа. Подождём, что из неё получится в будущем.

byko3y ★★★★★
()
Ответ на: комментарий от byko3y

это новая перспективная платформа. Подождём, что из неё получится в будущем.

Я долгое время путал версии 0.8 и 8.0 и соответственно 0.12 и 12.0.

sarumeister
()
Ответ на: комментарий от no-such-file

Заметит, пусть и не сразу. 5 и 30мс огромная разница, это я тебе как геймер скажу. И 30мс это уже очень плохо бывает для много чего. Я некоторые модули специально на раст переписываю для сглаживания таких вот неприятных мест.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

5 и 30мс огромная разница, это я тебе как геймер скажу

Как геймер я тебе скажу, что у него input/output лаг больше чем 30мс. А может и у тебя, плацебо никто не отменял.

no-such-file ★★★★★
()
Ответ на: комментарий от r--r--r--

Это откуда такие цифры? Я делал в свое время синтетику, отдачу «хеллоу ворлд» (на разных языках и библиотеках). 3500 rps было, на одноплатнике OrangePiPlus.

sarumeister
()
Ответ на: комментарий от sarumeister

Это откуда такие цифры?

С последнего чемпионата по контре.

r--r--r--
()
Ответ на: комментарий от Somebody

Конечно же нет. Странно что такое повсеместно не внедрели во времена медленного интернета. Ведь если бы сначала грузился мегабайт или около того скриптов а после эти скрипты грузили бы кусочки страницы, то это нивелировало бы медленную скорость передачи. Все скрипты сохранялись бы в кеше и при последующих заходах было бы ещё быстрее. Оптимизация.

wenxuan
()
Ответ на: комментарий от wenxuan

Странно что такое повсеместно не внедрели во времена медленного интернета

Ничего тут «странного» нет: не додумались тогда до такого решения, не придумали ещё ( такое решение) ещё. И ты, в том числе. ;) :))

Не накопила ещё та часть человечества, которая и занимается «придумыванием», достаточного опыта, который бы и послужил «катализатором» для возникновения таких идей...

Всему своё время...

Somebody ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.