Выпуск сервернай JavaScript-платформы Node.js 14.0

Адбыўся рэліз Node.js 14.0, платформы для выканання сеткавых прыкладанняў на мове JavaScript. Node.js 14.0 адносіцца да галін з працяглым тэрмінам падтрымкі, але дадзены статус будзе прысвоены толькі ў кастрычніку, пасля правядзення стабілізацыі. Падтрымка Node.js 14.0 будзе ажыццяўляцца да красавіка 2023 года. Суправаджэнне мінулай LTS-галінкі Node.js 12.0 працягнецца да красавіка 2022 года, а пазамінулай LTS-галінкі 10.0 да красавіка 2021 года. Падтрымка прамежкавага адгалінавання 13.x завершыцца ў чэрвені гэтага года.

Асноўныя паляпшэння:

  • Стабілізавана магчымасць генерацыі на лета або пры надыходзе пэўных падзей дыягнастычных справаздач, У якіх адлюстроўваюцца падзеі, якія дапамагаюць дыягностыцы такіх праблем як крахі, падзенне прадукцыйнасці, уцечкі памяці, вялікая нагрузка на CPU, непрадбачаная выснова памылак і да т.п.
  • Дададзена эксперыментальная падтрымка API Async Local Storage з рэалізацыяй класа AsyncLocalStorage, які можа прымяняцца для стварэння асінхроннага стану з апрацоўшчыкамі на базе callback-выклікаў і promise. AsyncLocalStorage дазваляе захоўваць дадзеныя на працягу апрацоўкі web-запыту, нагадваючы лакальныя для асобных струменяў сховішчы (Thread-Local Storage) у іншых мовах.
  • Прыбраны вывад папярэджання аб эксперментальнай магчымасці пры загрузцы модуляў ECMAScript 6 якія падключаюцца і экспартуюцца пры дапамозе выразаў import і export. Пры гэтым сама рэалізацыя модуляў ESM пакуль застаецца эксперыментальнай.
  • Рухавічок V8 абноўлены да версіі 8.1 (1, 2, 3), у якой унесены новыя аптымізацыі прадукцыйнасці і дададзены такія навіны, як новы лагічны аператар аб'яднання «??» (вяртае правы аперанд, калі левы аперанд мае значэнне NULL або undefined, і наадварот), аператар "?." для аднаразовай праверкі ўсяго ланцужка ўласцівасцяў або выклікаў (напрыклад "db?.user?.name?.length" без папярэдніх праверак), метад Intl.DisplayName для атрымання лакалізаваных назваў і да т.п.
  • Праведзена рэвізія API Streams, накіраваная на паляпшэнне ўзгодненасці API-інтэрфейсаў Streams і ўхіленні адрозненняў у паводзінах базавых элементаў Node.js. Напрыклад, паводзіны http.OutgoingMessage набліжана да stream.Writable, а net.Socket да stream.Duplex. Опцыя autoDestroy па змаўчанні выстаўлена ў значэнне "true", якое разумее выклік "_destroy" пасля завяршэння.
  • Дададзена эксперыментальная падтрымка API ВАСІ (WebAssembly System Interface), які прадстаўляе праграмныя інтэрфейсы для прамога ўзаемадзеяння з аперацыйнай сістэмай (POSIX API для працы з файламі, сокетамі і да т.п.).
  • Павышаны патрабаванні да мінімальным версіям кампілятараў і платформаў: macOS 10.13 (High Sierra), GCC 6, Windows навей 7/2008R2.

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

Для забеспячэння апрацоўкі вялікай колькасці паралельных запытаў Node.js задзейнічае асінхронную мадэль запуску кода, заснаваную на апрацоўцы падзей у неблакіруючым рэжыме і вызначэнні callback-апрацоўшчыкаў. У якасці спосабаў мультыплексавання злучэнняў падтрымліваюцца такія метады, як epoll, kqueue, /dev/poll і select. Для мультыплексавання злучэнняў выкарыстоўваецца бібліятэка любіў, якая з'яўляецца надбудовай над libev у сістэмах Unix і над IOCP у Windows. Для стварэння пула патокаў (thread pool) задзейнічана бібліятэка libeio, для выканання DNS-запытаў у неблакіруючым рэжыме інтэграваны з-арэі. Усе сістэмныя выклікі, якія выклікаюць блакаванне, выконваюцца ўсярэдзіне пула струменяў і затым, як і апрацоўшчыкі сігналаў, перадаюць вынік сваёй працы зваротна праз неназваны канал (pipe). Выкананне JavaScript-кода забяспечваецца праз задзейнічанне распрацаванага кампаніяй Google рухавічка V8 (дадаткова Microsoft развівае варыянт Node.js з рухавіком Chakra-Core).

Па сваёй сутнасці Node.js падобны на фрэймворкі. Perl AnyEvent, Ruby Event Machine, Python Twisted и рэалізацыю падзей у Tcl, але цыкл апрацоўкі падзей (event loop) у Node.js скрыты ад распрацоўніка і нагадвае апрацоўку падзей у web-дадатку, які працуе ў браўзэры. Пры напісанні прыкладанняў для node.js неабходна ўлічваць спецыфіку падзейна-арыентаванага праграмавання, напрыклад, замест выканання "var result = db.query("select..");" з чаканнем завяршэння працы і наступнай апрацоўкай вынікаў, у Node.js выкарыстоўвае прынцып асінхроннага выканання, г.зн. код трансфармуецца ў "db.query("select..", function (result) {апрацоўка выніку});", пры якім кіраванне імгненна пяройдзе да наступнага кода, а вынік запыту будзе апрацаваны па меры паступлення дадзеных. .

Крыніца: opennet.ru

Дадаць каментар