JavaScript প্ল্যাটফর্ম Node.js 22.0.0 উপলব্ধ

Состоялся релиз 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 প্ল্যাটফর্মটি ওয়েব অ্যাপ্লিকেশনের সার্ভার রক্ষণাবেক্ষণ এবং নিয়মিত ক্লায়েন্ট এবং সার্ভার নেটওয়ার্ক প্রোগ্রাম তৈরির জন্য উভয়ই ব্যবহার করা যেতে পারে। Node.js-এর জন্য অ্যাপ্লিকেশনগুলির কার্যকারিতা প্রসারিত করার জন্য, মডিউলগুলির একটি বড় সংগ্রহ প্রস্তুত করা হয়েছে, যেখানে আপনি HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 সার্ভার এবং ক্লায়েন্ট, ইন্টিগ্রেশনের জন্য মডিউলগুলি বাস্তবায়নের সাথে মডিউলগুলি খুঁজে পেতে পারেন। বিভিন্ন ওয়েব ফ্রেমওয়ার্ক, WebSocket এবং Ajax হ্যান্ডলার, DBMS কানেক্টর (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-приложении, работающем в браузере.

উত্স: opennet.ru

একটি মন্তব্য জুড়ুন