Node.js muallifi Deno 1.0 xavfsiz JavaScript platformasini taqdim etdi

Ikki yillik rivojlanishdan keyin taqdim etildi birinchi yirik nashr Menga 1.0 bering, JavaScript va TypeScript-da ilovalarning mustaqil bajarilishi uchun platforma bo'lib, undan serverda ishlaydigan ishlov beruvchilarni yaratish uchun foydalanish mumkin. Platforma Rayan Dahl tomonidan ishlab chiqilgan (Rayan Dahl), Node.js yaratuvchisi. Node.js singari, Deno ham JavaScript dvigatelidan foydalanadi V8, bu Chromium-ga asoslangan brauzerlarda ham qo'llaniladi. Shu bilan birga, Deno Node.js vilkasi emas, balki noldan yaratilgan yangi loyihadir. Loyiha kodi tarqaladi MIT litsenziyasi ostida. Assambleyalar tayyorlangan Linux, Windows va macOS uchun.

Muhim versiya raqami ilovalarning OT bilan o'zaro ta'siri uchun mas'ul bo'lgan Deno nomlar maydonidagi API-larni barqarorlashtirish bilan bog'liq. Hozirgacha mavjud bo'lgan dasturiy interfeyslar barqarorlashtirilmagan, sukut bo'yicha yashirin va faqat "--stabil" rejimida ishlaganda mavjud. Yangi versiyalar paydo bo'lganda, bunday APIlar asta-sekin barqaror bo'ladi. SetTimeout() va fetch() kabi umumiy funksiyalarni oʻz ichiga olgan global nomlar maydonidagi API anʼanaviy veb-brauzerlarning APIʼsiga imkon qadar yaqin va brauzerlar uchun veb-standartlarga muvofiq ishlab chiqilgan. Rust tomonidan taqdim etilgan, to'g'ridan-to'g'ri platforma kodida ishlatiladigan API'lar, shuningdek, Deno ish vaqti uchun plaginlarni ishlab chiqish interfeysi hali barqarorlashtirilmagan va rivojlanishda davom etmoqda.

Yangi JavaScript platformasini yaratishning asosiy sabablari kontseptual xatolarni bartaraf etish istagi edi, tan olingan Node.js arxitekturasida va foydalanuvchilarga xavfsizroq muhitni taqdim eting. Xavfsizlikni yaxshilash uchun V8 dvigateli Rust tilida yozilgan bo'lib, u past darajadagi xotira manipulyatsiyasi natijasida kelib chiqadigan ko'plab zaifliklardan qochadi, masalan, bepul kirish, null ko'rsatkichni yo'qotish va buferdan oshib ketish. Platforma bloklanmaydigan rejimda so'rovlarni qayta ishlash uchun ishlatiladi Tokio, Rustda ham yozilgan. Tokio sizga hodisalarga asoslangan arxitektura asosida yuqori samarali ilovalar yaratishga imkon beradi, ko'p tarmoqli ulanishni qo'llab-quvvatlaydi va asinxron rejimda tarmoq so'rovlarini qayta ishlaydi.

asosiy xususiyatlari Deno:

  • Xavfsizlikka yo'naltirilgan standart konfiguratsiya. Faylga kirish, tarmoqqa ulanish va atrof-muhit o'zgaruvchilariga kirish sukut bo'yicha o'chirib qo'yilgan va aniq yoqilgan bo'lishi kerak. Ilovalar sukut bo'yicha izolyatsiyalangan sinov muhitida ishlaydi va aniq ruxsatnomalarsiz tizim imkoniyatlariga kira olmaydi;
  • JavaScript-dan tashqari TypeScript-ni o'rnatilgan qo'llab-quvvatlash. Standart TypeScript kompilyatori turlarni tekshirish va JavaScript-ni yaratish uchun ishlatiladi, bu esa V8 da JavaScript-ni tahlil qilish bilan solishtirganda unumdorlikka olib keladi. Kelajakda biz TypeScript turini tekshirish tizimini o'zimiz tatbiq etishni tayyorlashni rejalashtirmoqdamiz, bu esa TypeScript-ni qayta ishlash samaradorligini kattalik darajasida yaxshilaydi;
  • Ish vaqti bitta mustaqil bajariladigan fayl ("deno") shaklida keladi. Deno yordamida ilovalarni ishga tushirish kifoya yuklab olish uning platformasi uchun 20 MB hajmdagi bitta bajariladigan fayl mavjud bo'lib, u tashqi bog'liqliklarga ega emas va tizimda hech qanday maxsus o'rnatishni talab qilmaydi. Bundan tashqari, deno monolit dastur emas, balki Rust-dagi qutilar to'plamidir (deno_core, rusty_v8), alohida ishlatilishi mumkin;
  • Dasturni ishga tushirishda, shuningdek, modullarni yuklash uchun siz URL manzilini ishlatishingiz mumkin. Masalan, Welcome.js dasturini ishga tushirish uchun siz “deno https://deno.land/std/examples/welcome.js” buyrug‘idan foydalanishingiz mumkin. Tashqi manbalardan olingan kod mahalliy tizimda yuklab olinadi va keshlanadi, lekin hech qachon avtomatik ravishda yangilanmaydi (yangilash uchun ilovani “--reload” bayrog‘i bilan aniq ishga tushirish kerak);
  • Ilovalarda HTTP orqali tarmoq so'rovlarini samarali qayta ishlash; platforma yuqori samarali tarmoq ilovalarini yaratish uchun mo'ljallangan;
  • Denoda ham, oddiy veb-brauzerda ham bajarilishi mumkin bo'lgan universal veb-ilovalarni yaratish qobiliyati;
  • imkoniyat standart modullar to'plami, ulardan foydalanish tashqi bog'liqliklarga bog'lanishni talab qilmaydi. Standart to'plamdagi modullar qo'shimcha audit va muvofiqlik sinovlaridan o'tgan;
  • Ish vaqti bilan bir qatorda, Deno platformasi paket menejeri vazifasini ham bajaradi va kod ichidagi URL orqali modullarga kirish imkonini beradi. Masalan, modulni yuklash uchun siz “https://deno.land/std/log/mod.ts” dan “import *” kodini belgilashingiz mumkin. URL orqali tashqi serverlardan yuklab olingan fayllar keshlanadi. Modul versiyalari bilan bogʻlanish URL ichidagi versiya raqamlarini koʻrsatish orqali aniqlanadi, masalan, “https://unpkg.com/[elektron pochta bilan himoyalangan]/dist/liltest.js";
  • Strukturaga integratsiyalangan qaramlikni tekshirish tizimi ("deno info" buyrug'i) va kodni formatlash uchun yordamchi dastur (deno fmt);
  • Barcha dastur skriptlari bitta JavaScript fayliga birlashtirilishi mumkin.

Node.js dan farqlari:

  • Deno npm paket menejeridan foydalanmaydi
    va omborlarga bog'lanmagan, modullar URL yoki fayl yo'li orqali murojaat qilinadi va modullarning o'zi istalgan veb-saytga joylashtirilishi mumkin;
  • Deno modullarni aniqlash uchun "package.json" dan foydalanmaydi;
  • API farqi, Denodagi barcha asinxron harakatlar va'dani qaytaradi;
  • Deno fayllar, tarmoq va atrof-muhit o'zgaruvchilari uchun barcha zarur ruxsatlarni aniq belgilashni talab qiladi;
  • Ishlovchilar bilan ta'minlanmagan barcha xatolar dasturni tugatishga olib keladi;
  • Deno ECMAScript modul tizimidan foydalanadi va require();
  • Denoning o'rnatilgan HTTP serveri TypeScript-da yozilgan va mahalliy TCP soketlari ustida ishlaydi, Node.js HTTP serveri esa C tilida yozilgan va JavaScript uchun ulanishlarni ta'minlaydi. Deno ishlab chiquvchilari butun TCP soket qatlamini optimallashtirish va umumiy interfeysni ta'minlashga e'tibor qaratdilar. Deno HTTP Server pastroq o'tkazuvchanlikni ta'minlaydi, lekin bashorat qilinadigan past kechikishni kafolatlaydi. Masalan, testda Deno HTTP serveriga asoslangan oddiy dastur sekundiga 25 ming so‘rovni maksimal kechikish vaqti 1.3 millisekundga teng bo‘lgan holda qayta ishlashga muvaffaq bo‘ldi. Node.js’da shunga o‘xshash dastur soniyasiga 34 ming so‘rovni qayta ishlagan, biroq kechikishlar 2 va 300 millisekundgacha bo‘lgan.
  • Deno Node.js (NPM) paketlari bilan mos kelmaydi, lekin alohida ishlab chiqilmoqda oraliq qatlam standart Node.js kutubxonasi bilan muvofiqligi uchun, u ishlab chiqilgach, Node.js uchun yozilgan ko'proq ilovalar Denoda ishlay oladi.
  • Manba: opennet.ru

a Izoh qo'shish