Сервер жағындағы JavaScript платформасы Node.js 20.0 қолжетімді

JavaScript тілінде желілік қосымшаларды орындауға арналған платформа Node.js 20.0 шығарылымы өтті. Node.js 20.0 ұзақ қолдау тармағына тағайындалды, бірақ бұл күй тұрақтандырудан кейін қазан айына дейін тағайындалмайды. Node.js 20.x нұсқасына 30 жылдың 2026 сәуіріне дейін қолдау көрсетіледі. Алдыңғы Node.js 18.x LTS филиалына техникалық қызмет көрсету 2025 жылдың сәуіріне дейін, ал алдыңғы 16.x LTS тармағына 2023 жылдың қыркүйегіне дейін созылады. 14.x LTS филиалы 30 сәуірде, ал Node.js 19.x уақытша филиалы 1 маусымда сақталады.

Негізгі жақсартулар:

  • V8 қозғалтқышы Chromium 11.3 жүйесінде қолданылатын 113 нұсқасына жаңартылды. Chromium 19 қозғалтқышы, String.prototype.isWellFormed және toWellFormed функцияларын пайдаланған Node.js 107 тармағымен салыстырғандағы өзгерістерден Array.prototype және TypedArray.prototype әдістерін, массив және TypedArray нысандарын өзгерту бойынша көшірмемен жұмыс істеу, RegExp ішіндегі "v" жалауы, ArrayBuffer өлшемін өзгертуге қолдау көрсету және SharedArrayBuffer өлшемін ұлғайту, WebAssembly жүйесінде tail-call.
  • Орындау кезінде белгілі бір ресурстарға қол жеткізуді шектеуге мүмкіндік беретін эксперименттік рұқсат үлгісі механизмі ұсынылады. Рұқсат үлгісінің қолдауы іске қосылған кезде "--экспериментальды-рұқсат" жалауын көрсету арқылы қосылады. Бастапқы іске асыруда жазу (--allow-fs-write) және оқуға (--allow-fs-read) FS-нің белгілі бір бөліктеріне, еншілес процестерге (--allow-child-process) қол жеткізуді шектеу опциялары ұсынылды. , қондырмалар (--no-addons ) және ағындар (--allow-worker). Мысалы, /tmp каталогына жазуға және /home/index.js файлын оқуға рұқсат беру үшін мынаны көрсетуге болады: түйін --экспериментальды-рұқсат --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js индексі .js

    Қол жеткізуді тексеру үшін process.permission.has() әдісін пайдалану ұсынылады, мысалы, "process.permission.has('fs.write',"/tmp/test").

  • "--experimental-loader" опциясы арқылы жүктелген ECMAScript сыртқы модульдеріне (ESM) арналған өңдеушілер енді негізгі ағыннан оқшауланған бөлек ағында орындалады, бұл қолданба коды мен жүктелген ESM модульдерінің қиылысуын болдырмайды. Браузерлерге ұқсас, import.meta.resolve() әдісі енді қолданба ішінен шақырылған кезде синхронды түрде орындалады. Node.js келесі филиалдарының бірінде ESM жүктеуді қолдауды тұрақты мүмкіндіктер санатына ауыстыру жоспарлануда.
  • TAP (Test Anything Protocol) пішімінде нәтижелерді қайтаратын JavaScript сынақтарын жасауға және іске қосуға арналған node:test (test_runner) модулі тұрақты күйге жылжытылды.
  • Жеке өнімділік тобы құрылды, ол жаңа филиалға дайындық кезінде әртүрлі орындалу уақытының құрамдастарын, соның ішінде URL талдауын, fetch() және EventTarget-ті жылдамдату үшін жұмыс істеді. Мысалы, EventTarget инициализациясының үстеме шығындары екі есе азайды, URL.canParse() әдісінің өнімділігі айтарлықтай жақсарды және таймерлердің тиімділігі жақсарды. Сонымен қатар, C++ тілінде жазылған жоғары өнімді URL талдаушысының – Ada 2.0 шығарылымы композицияға енгізілген.
  • Бір орындалатын файл (SEA, Single Executable Applications) түрінде қолданбаларды жеткізуге арналған эксперименттік мүмкіндікті әзірлеу жалғасты. Енді орындалатын файлды жасау JSON конфигурация файлынан жасалған блокты ауыстыруды қажет етеді (JavaScript файлын ауыстырудың орнына).
  • Басқа жобалардың іске асыруларымен жақсартылған Web Crypto API үйлесімділігі.
  • ARM64 жүйелерінде Windows үшін ресми қолдау қосылды.
  • Оқшау WebAssembly қолданбаларын жасау үшін WASI (WebAssembly жүйелік интерфейс) кеңейтімдерін қолдауды жалғастыру. WASI қолдауын қосу үшін арнайы пәрмен жолы жалаушасын көрсету қажеттілігі жойылды.

Node.js платформасын веб-қосымшаларға серверге қызмет көрсету үшін де, тұрақты клиенттік және серверлік желілік бағдарламаларды жасау үшін де пайдалануға болады. Node.js қолданбаларының функционалдығын кеңейту үшін модульдердің үлкен жинағы дайындалды, олардан HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 серверлері мен клиенттерін жүзеге асыратын модульдерді, интеграцияға арналған модульдерді табуға болады. әртүрлі веб-фремворктермен, WebSocket және Ajax өңдеушілерімен, ДҚБЖ қосқыштарымен (MySQL, PostgreSQL, SQLite, MongoDB), шаблондық қозғалтқыштармен, CSS қозғалтқыштарымен, криптографиялық алгоритмдер мен авторизация жүйелерін (OAuth) іске асырумен, XML талдаушыларымен.

Параллельді сұраулардың үлкен санын өңдеуді қамтамасыз ету үшін Node.js блокталмаған оқиғаларды өңдеуге және кері шақыру өңдегіштерінің анықтамасына негізделген асинхронды кодты орындау үлгісін пайдаланады. Қосылымдарды мультиплекстеу үшін қолдау көрсетілетін әдістер epoll, kqueue, /dev/poll және таңдау болып табылады. Қосылымды мультиплекстеу үшін Unix жүйелерінде libev және Windows жүйесінде IOCP үшін қосымша болып табылатын libuv кітапханасы пайдаланылады. Libeio кітапханасы ағындар пулын жасау үшін пайдаланылады, ал c-ares блокталмаған режимде DNS сұрауларын орындау үшін біріктірілген. Блоктауды тудыратын барлық жүйелік шақырулар ағынды пулдың ішінде орындалады, содан кейін сигнал өңдеушілері сияқты өз жұмысының нәтижесін атауы жоқ құбыр (құбыр) арқылы кері тасымалдайды. JavaScript кодының орындалуы Google әзірлеген V8 қозғалтқышын пайдалану арқылы қамтамасыз етіледі (осыдан басқа, Microsoft Chakra-Core қозғалтқышы бар Node.js нұсқасын әзірлеуде).

Негізінде Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted құрылымдарына және Tcl оқиғасын іске асыруға ұқсас, бірақ Node.js ішіндегі оқиғалар циклі әзірлеушіден жасырылған және іске қосылған веб-бағдарламада оқиғаларды өңдеуге ұқсайды. браузерде. node.js үшін қолданбаларды жазғанда, мысалы, "var result = db.query("select..");" орындаудың орнына оқиғаға негізделген бағдарламалаудың ерекшеліктерін ескеру қажет. жұмыстың аяқталуын күтумен және нәтижелерді кейіннен өңдеумен, Node.js асинхронды орындау принципін пайдаланады, яғни. код "db.query("select..", функция (нәтиже) {нәтижені өңдеу}); түрлендіріледі, онда басқару бірден келесі кодқа өтеді, ал сұрау нәтижесі деректер келген сайын өңделеді.

Ақпарат көзі: opennet.ru

пікір қалдыру