Server tomonidagi JavaScript platformasi Node.js 21.0 mavjud

Node.js 21.0, JavaScript-da tarmoq ilovalarini ishga tushirish platformasi chiqarildi. Node.js 21.0 filiali 6 oy davomida qo'llab-quvvatlanadi. Yaqin kunlarda Node.js 20 filialini barqarorlashtirish tugallanadi, u LTS maqomini oladi va 2026 yil apreligacha qo'llab-quvvatlanadi. Node.js 18.0 ning oldingi LTS filialiga texnik xizmat ko‘rsatish 2025-yil sentabrigacha va oxirgi LTS 16.0 filialidan oldingi yil 2024-yil apreligacha davom etadi.

Asosiy yaxshilanishlar:

  • Fetch API barqaror deb e'lon qilindi, u tarmoq orqali resurslarni yuklash va server va mijoz tomonlarida ishlash uchun mos universal JavaScript kodini yozishni soddalashtirish uchun mo'ljallangan. Amalga oshirish HTTP/1.1 undici mijozi kodiga asoslangan va brauzerlarda taqdim etilgan o'xshash APIga iloji boricha yaqinroq. API fetch() usuli va Headers obyektlarini o'z ichiga oladi. HTTP sarlavhalarini, so'rov va javobni ifodalovchi so'rov va javob. const res = olishni kutish ('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = kutish res.json(); console.log(ma'lumotlar); }
  • Tarmoq orqali qabul qilingan ma’lumotlar oqimiga kirishni ta’minlovchi WebStreams API’ni qo‘llab-quvvatlash barqarorlashtirildi. API butun faylni yuklab olishni kutmasdan, tarmoq orqali ma'lumotlar kelishi bilan ma'lumotlar bilan ishlaydigan o'zingizning ishlov beruvchilaringizni qo'shish imkonini beradi. Node.js da mavjud ob'ektlar orasida ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream va DecompressionStream mavjud.
  • Brauzerlar bilan mos keladigan WebSocket mijozining eksperimental ilovasi qo'shildi. WebSocket-ni qo'llab-quvvatlashni yoqish uchun "--experimental-websocket" bayrog'i taqdim etiladi.
  • CommonJS (Node.js uchun xos) oʻrniga ESM (ECMAScript Modules, brauzerlar uchun modullarda qoʻllaniladigan) JavaScript modullarining standart amalga oshirilishidan foydalanish uchun eksperimental rejim qoʻshildi. O'zgartirish "--input-type" bayrog'i orqali ko'rsatilgan package.json faylidagi "tur" maydoni orqali formati aniq belgilangan yoki fayl kengaytmasi (ESM uchun .mjs, .cjs) tufayli aniq bo'lgan modullarga ta'sir qilmaydi. CommonJS uchun). Biroq, CommonJS sifatida aniq belgilanmagan modullar (masalan, “.js” kengaytmasiga ega) yangi rejim yoqilganda ESM modullari sifatida ko‘rib chiqiladi. Yangi modul sozlamalarini faollashtirish uchun “--experimental-default-type” bayrog‘i taklif qilingan.
  • V8 dvigateli Chromium 11.8 da qo‘llanilgan 118 versiyasiga yangilandi, u endi ArrayBuffer.prototype.transfer usulini, massivlarni guruhlash qobiliyatini (groupBy usuli) va doimiylarni qayta ishlash bo‘yicha WebAssembly ko‘rsatmalarini (i32.add, i32.sub, i32.mul, i64 .add, i64.sub va i64.mul).
  • Modullarni sozlash uchun qo'ng'iroqlarni ro'yxatdan o'tkazish va ishga tushirish foydasiga globalPreload ishlov beruvchisini qo'llab-quvvatlash to'xtatildi.
  • Fs.writeFile funksiyasiga har bir yozish operatsiyasidan so‘ng ma’lumotlarni drayverga o‘chirishga majburlash uchun “to‘ldirish” opsiyasi qo‘shildi.
  • URLni tahlil qilish, APIni olish, oqimlar, node:fs va HTTP bilan bog'liq kodning yaxshilangan ishlashi.
  • Global navigator ob'ekti qo'shildi. Masalan, protsessor yadrolari soni haqidagi ma'lumotlarni olish uchun siz navigator.hardwareConcurrency xususiyatidan foydalanishingiz mumkin.
  • “—test” parametrida ishga tushirish uchun testlarni tanlash uchun glob maskalari qoʻshilgan (masalan, “—test **/*.test.js.” ni belgilashingiz mumkin).
  • Birlashtirilgan paket menejeri npm 10.2.0 va llhttp 9.1.2 tahlilchisi yangilandi.
  • Visual Studio 2019 va macOS’ning 11.0 dan eski versiyalarini qo‘llab-quvvatlash to‘xtatildi.

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