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

даступны рэліз Node.js 13.0, платформы для выканання сеткавых прыкладанняў на мове JavaScript. Адначасова завершана стабілізацыя мінулай галіны Node.js 12.x, якая пераведзена ў катэгорыю выпускаў з працяглым тэрмінам падтрымкі, абнаўленні для якіх выпускаюцца на працягу 4 гадоў. Падтрымка мінулай LTS-галінкі Node.js 10.0 працягнецца да красавіка 2021 года, а пазамінулай LTS-галінкі 8.0 да студзеня 2020 гады.

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

  • Рухавічок V8 абноўлены да версіі 7.8, у якой задзейнічаны новыя метады аптымізацыі прадукцыйнасці, палепшана дэструктурызацыя аб'ектаў, зменшана спажыванне памяці і скарочаны час падрыхтоўкі да выканання WebAssembly;
  • Па змаўчанні ўключана поўная падтрымка інтэрнацыяналізацыі і Unicode на базе бібліятэк Сыстэмы (International Components for Unicode), якая дазваляе распрацоўнікам пісаць код, які падтрымлівае працу з рознымі мовамі і лакалямі. Модуль full-icu зараз усталяваны па змаўчанні;
  • Стабілізаваны API Workers Threads, які дазваляе ствараць шматструменныя цыклы апрацоўкі падзей (event loop). Рэалізацыя заснавана на модулі worker_threads, які дазваляе запускаць JavaScript-код у некалькі паралельных патокаў. Стабільная падтрымка API Workers Threads таксама бэкепартаваная ў LTS-галінку Node.js 12.x;
  • Павышаны патрабаванні да платформ. Для зборкі зараз патрабуецца як мінімум macOS 10.11 (патрабуецца Xcode 10), AIX 7.2, Ubuntu 16.04, Debian 9, EL 7, Alpine 3.8, Windows 7/2008;
  • Палепшана падтрымка Python 3. Пры наяўнасці ў сістэме Python 2 і Python 3, па-ранейшаму выкарыстоўваецца Python 2, але дададзена магчымасць зборкі пры наяўнасці ў сістэме толькі Python 3;
  • Выдалена старая рэалізацыя HTTP-парсера ("-http-parser=legacy"). Выдалены або пераведзены ў разрад састарэлых выклікі і ўласцівасці FSWatcher.prototype.start(), ChildProcess._channel, метад open() у аб'ектах ReadStream і WriteStream, request.connection, response.connection, module.createRequireFromPath();
  • Следам выйшла абнаўленне 13.0.1, у якім па гарачых слядах ухілена некалькі памылак. У тым ліку вырашана праблема з высновай у npm 6.12.0 папярэджання аб выкарыстанні непадтрымліваемай версіі.

Нагадаем, што платформа 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

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