Server tomonidagi JavaScript platformasi Node.js 20.0 mavjud

JavaScript-da tarmoq ilovalarini bajarish uchun platforma Node.js 20.0 versiyasi bo'lib o'tdi. Node.js 20.0 uzoq qoʻllab-quvvatlash boʻlimiga tayinlangan, ammo bu holat barqarorlashgandan keyin oktyabrgacha tayinlanmaydi. Node.js 20.x 30-yil 2026-aprelgacha qo‘llab-quvvatlanadi. Oldingi Node.js 18.x LTS filialiga texnik xizmat ko‘rsatish 2025-yil apreligacha, oldingi 16.x LTS filiali esa 2023-yil sentabrgacha davom etadi. 14.x LTS filiali 30 aprelda, Node.js 19.x vaqtinchalik filiali esa 1 iyunda saqlanadi.

Asosiy yaxshilanishlar:

  • V8 dvigateli Chromium 11.3 da qo‘llaniladigan 113 versiyasiga yangilandi. Chromium 19 dvigatelidan foydalangan Node.js 107 filialiga nisbatan o‘zgarishlardan String.prototype.isWellFormed va toWellFormed funksiyalari Array.prototype. va TypedArray.prototype usullari, Array va TypedArray obyektlarini oʻzgartirish boʻyicha nusxalar bilan ishlash, RegExpʼdagi “v” bayrogʻi, ArrayBuffer hajmini oʻzgartirishni qoʻllab-quvvatlash va SharedArrayBuffer hajmini oshirish, WebAssemblyʼda tail-call.
  • Amalga oshirish jarayonida ma'lum resurslarga kirishni cheklash imkonini beruvchi eksperimental Ruxsat modeli mexanizmi taklif etiladi. Ruxsat modeli qo'llab-quvvatlashi ishga tushirilganda "--eksperimental-ruxsat" belgisini ko'rsatish orqali yoqiladi. Dastlabki amalga oshirishda yozish (--allow-fs-write) va o'qish (--allow-fs-read) FSning ma'lum qismlariga, bolalar jarayonlariga (--allow-child-process) kirishni cheklash variantlari taklif qilindi. , qo'shimchalar (--no-addons ) va mavzular (--allow-worker). Masalan, /tmp katalogiga yozish va /home/index.js faylini o'qishga ruxsat berish uchun quyidagilarni belgilashingiz mumkin: tugun --eksperimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js indeksi .js

    Kirishni tekshirish uchun process.permission.has() usulidan foydalanish tavsiya etiladi, masalan, "process.permission.has('fs.write',"/tmp/test").

  • "--experimental-loader" opsiyasi orqali yuklangan ECMAScript tashqi modullari (ESM) uchun ishlov beruvchilar endi asosiy ipdan ajratilgan alohida ish zarrachasida bajariladi, bu esa dastur kodi va yuklangan ESM modullarining kesishishini bartaraf etadi. Brauzerlarga o'xshab import.meta.resolve() usuli endi ilova ichidan chaqirilganda sinxron ishlaydi. Node.js ning navbatdagi filiallaridan birida ESM yuklashni qo‘llab-quvvatlash barqaror funksiyalar toifasiga o‘tkazilishi rejalashtirilgan.
  • TAP (Test Anything Protocol) formatida natijalarni qaytaradigan JavaScript testlarini yaratish va ishga tushirish uchun moʻljallangan tugun:test (test_runner) moduli barqaror holatga oʻtkazildi.
  • Alohida ishlash guruhi tuzildi, u yangi bo'limga tayyorgarlik ko'rish jarayonida turli xil ish vaqti komponentlarini, jumladan URL tahlili, fetch() va EventTargetni tezlashtirish ustida ishladi. Misol uchun, EventTarget-ni ishga tushirish uchun qo'shimcha xarajatlar ikki baravar kamaydi, URL.canParse() usulining ishlashi sezilarli darajada yaxshilandi va taymerlarning samaradorligi yaxshilandi. Bundan tashqari, kompozitsiyaga C++ tilida yozilgan yuqori samarali URL tahlilchisi - Ada 2.0 ning chiqarilishi kiritilgan.
  • Ilovalarni yagona bajariladigan fayl (SEA, Single Executable Applications) ko‘rinishida yetkazib berish uchun eksperimental funksiyani ishlab chiqish davom ettirildi. Bajariladigan faylni yaratish endi JSON konfiguratsiya faylidan yaratilgan blobni almashtirishni talab qiladi (JavaScript faylini almashtirish o'rniga).
  • Boshqa loyihalarning ilovalari bilan yaxshilangan Web Crypto API muvofiqligi.
  • ARM64 tizimlarida Windows uchun rasmiy yordam qo'shildi.
  • Mustaqil WebAssembly ilovalarini yaratish uchun WASI (WebAssembly System Interface) kengaytmalarini qo'llab-quvvatlash davom etmoqda. WASI qo'llab-quvvatlashini yoqish uchun maxsus buyruq qatori bayrog'ini belgilash zarurati olib tashlandi.

Node.js platformasidan ham veb-ilovalar serveriga texnik xizmat ko'rsatish, ham oddiy mijoz va server tarmoq dasturlarini yaratish uchun foydalanish mumkin. Node.js uchun ilovalarning funksionalligini kengaytirish uchun modullarning katta to‘plami tayyorlandi, ularda HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 serverlari va mijozlari, integratsiya modullarini amalga oshirish modullarini topishingiz mumkin. turli veb-ramkalar, WebSocket va Ajax ishlov beruvchilari, DBMS konnektorlari (MySQL, PostgreSQL, SQLite, MongoDB), shablonlash dvigatellari, CSS dvigatellari, kripto algoritmlari va avtorizatsiya tizimlari (OAuth), XML tahlilchilari.

Ko'p sonli parallel so'rovlarni qayta ishlashni ta'minlash uchun Node.js bloklanmaydigan hodisalarni qayta ishlash va qayta qo'ng'iroqlarni qayta ishlash vositalarini aniqlashga asoslangan asinxron kodni bajarish modelidan foydalanadi. Ulanishlarni multiplekslash uchun qo'llab-quvvatlanadigan usullar epoll, kqueue, /dev/poll va tanlash hisoblanadi. Ulanishni multiplekslash uchun Unix tizimlarida libev va Windowsda IOCP uchun qo'shimcha bo'lgan libuv kutubxonasidan foydalaniladi. Libeio kutubxonasi iplar hovuzini yaratish uchun ishlatiladi va c-ares bloklanmagan rejimda DNS so'rovlarini bajarish uchun birlashtirilgan. Bloklashni keltirib chiqaradigan barcha tizim qo'ng'iroqlari iplar hovuzi ichida amalga oshiriladi va keyin signal ishlov beruvchilari kabi o'z ishining natijasini noma'lum quvur (quvur) orqali qaytaradi. JavaScript kodining bajarilishi Google tomonidan ishlab chiqilgan V8 dvigatelidan foydalanish orqali ta'minlanadi (bundan tashqari, Microsoft Chakra-Core dvigateli bilan Node.js versiyasini ishlab chiqmoqda).

Asosan, Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted ramkalari va Tcl hodisalarini amalga oshirishga o'xshaydi, biroq Node.js-dagi voqealar tsikli ishlab chiquvchidan yashirin va ishlayotgan veb-ilovada hodisalarni qayta ishlashga o'xshaydi. brauzerda. Node.js uchun ilovalar yozishda, masalan, "var natija = db.query("select..");" qilish o'rniga, voqealarga asoslangan dasturlashning o'ziga xos xususiyatlarini hisobga olishingiz kerak. Ishning tugashini kutish va natijalarni keyinchalik qayta ishlash bilan Node.js asinxron bajarish tamoyilidan foydalanadi, ya'ni. kod "db.query("tanlang..", funktsiya (natija) {natijani qayta ishlash});" ga o'zgartiriladi, bunda boshqaruv darhol keyingi kodga o'tadi va ma'lumotlar kelishi bilan so'rov natijasi qayta ishlanadi.

Manba: opennet.ru

a Izoh qo'shish