Достапна е JavaScript платформата Node.js 20.0 од страна на серверот

Беше објавен Node.js 20.0, платформа за водење мрежни апликации во JavaScript. Node.js 20.0 е класифициран како гранка за долгорочна поддршка, но овој статус ќе биде доделен дури во октомври, по стабилизацијата. Node.js 20.x ќе биде поддржан до 30 април 2026 година. Одржувањето на претходната LTS гранка на Node.js 18.x ќе трае до април 2025 година, а онаа пред последната LTS гранка 16.x до септември 2023 година. Филијалата 14.x LTS ќе биде прекината на 30-ти април, а гранката Node.js 19.x ќе биде прекината на 1-ви јуни.

Главни подобрувања:

  • Моторот V8 е ажуриран на верзијата 11.3, користена во Chromium 113. Промените во споредба со гранката Node.js 19, која го користеше моторот Chromium 107, ги вклучуваат функциите String.prototype.isWellFormed и toWellFormed, Array.prototype и TypedArray. прототип методи за работа со копија при менување на Array и TypedArray објекти, ознаката „v“ во RegExp, поддршка за промена на големината на ArrayBuffer и зголемување на големината на SharedArrayBuffer, рекурзија на опашката (tail-call) во WebAssembly.
  • Предложен е експериментален механизам за модел на дозволи кој овозможува ограничување на пристапот до одредени ресурси за време на извршувањето. Поддршката за моделот на дозволи е овозможена со назначување на знамето „--experimental-permission“ кога работи. Почетната имплементација нуди опции за ограничување на пристапот за пишување (--allow-fs-write) и читање (--allow-fs-read) до одредени делови од датотечниот систем, детски процеси (--allow-child-process) и додатоци (--не-додатоци) ) и нишки (--allow-worker). На пример, за да дозволите пишување во директориумот /tmp и читање на датотеката /home/index.js, можете да наведете: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home /index.js индекс .js

    За да се провери пристапот, се предлага да се користи методот process.permission.has(), на пример, „process.permission.has('fs.write',"/tmp/test").

  • Ракувачите на ECMAScript надворешниот модул (ESM) вчитани преку опцијата „--experimental-loader“ сега работат во посебна нишка, изолирана од главната нишка, елиминирајќи го пресекот на кодот на апликацијата и вчитаните ESM модули. Слично на прелистувачите, методот import.meta.resolve() сега се извршува синхроно кога се повикува од апликација. Во една од следните гранки на Node.js, се планира поддршката за вчитување на ESM да се пренесе во категоријата стабилни карактеристики.
  • Модулот node:test (test_runner), дизајниран за креирање и извршување тестови во JavaScript кои враќаат резултати во формат TAP (Test Anything Protocol), е стабилен.
  • Формиран е посебен тим за развој одговорен за оптимизација на перформансите, кој, при подготовката на нова гранка, работеше на забрзување на различни компоненти за време на траење, вклучувајќи парсирање на URL, fetch() и EventTarget. На пример, трошоците за иницијализација на EventTarget се преполовени, перформансите на методот URL.canParse() се значително подобрени, а ефикасноста на тајмерите е подобрена. Вклучува и издавање на парсер за URL со високи перформанси, Ada 2.0, напишан во C++.
  • Продолжи развојот на експерименталната способност за доставување апликации во форма на една извршна датотека (SEA, Single Executable Applications). Создавањето извршна датотека сега бара замена на дупка генерирана од конфигурациска датотека во JSON формат (наместо да се замени датотека JavaScript).
  • Подобрена компатибилност на Web Crypto API со имплементации од други проекти.
  • Додадена е официјална поддршка за Windows на системите ARM64.
  • Продолжи имплементацијата на поддршката за WASI (WebAssembly System Interface) екстензии за создавање самостојни апликации WebAssembly. Отстранета е потребата да се определи специјално знаменце за командна линија за да се овозможи поддршка на WASI.

Платформата Node.js може да се користи и за серверско одржување на веб-апликации и за креирање редовни мрежни програми за клиент и сервер. За проширување на функционалноста на апликациите за Node.js, подготвена е голема колекција на модули, во кои можете да најдете модули со имплементација на HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 сервери и клиенти, модули за интеграција со различни веб-рамки, WebSocket и Ajax управувачи, DBMS конектори (MySQL, PostgreSQL, SQLite, MongoDB), мотори за шаблони, CSS мотори, имплементации на крипто алгоритми и системи за авторизација (OAuth), XML парсери.

За да се обезбеди обработка на голем број паралелни барања, Node.js користи асинхрон модел за извршување код базиран на неблокирачко справување со настани и дефиниција за ракувачи со повратен повик. Поддржани методи за мултиплексирање конекции се epoll, kqueue, /dev/poll и select. За мултиплексирање на поврзување, се користи библиотеката libuv, која е додаток за libev на Unix системите и IOCP на Windows. Библиотеката libeio се користи за создавање на базен на нишки, а c-ares е интегриран за извршување на барања за DNS во режим без блокирање. Сите системски повици кои предизвикуваат блокирање се извршуваат внатре во базенот на нишки и потоа, како ракувачи со сигнали, го пренесуваат резултатот од нивната работа назад преку неименувана цевка (цевка). Извршувањето на JavaScript кодот е обезбедено преку употреба на моторот V8 развиен од Google (покрај тоа, Microsoft развива верзија на Node.js со моторот Chakra-Core).

Во неговото јадро, Node.js е сличен на Perl AnyEvent, Ruby Event Machine, Python Twisted рамки и имплементацијата на настанот Tcl, но циклусот на настани во Node.js е скриен од развивачот и наликува на справување со настани во веб-апликација која работи во прелистувачот. Кога пишувате апликации за node.js, треба да ги земете предвид спецификите на програмирањето управувано од настани, на пример, наместо да правите "var result = db.query("select..");" со чекање за завршување на работата и последователна обработка на резултатите, Node.js го користи принципот на асинхроно извршување, т.е. кодот се трансформира во „db.query („избери..“, функција (резултат) {обработка на резултат});“, во која контролата веднаш ќе премине на понатамошниот код, а резултатот од барањето ќе се обработува како што пристигнуваат податоците.

Извор: opennet.ru

Додадете коментар