Node.js авторы Deno 1.0 қауіпсіз JavaScript платформасын ұсынды

Екі жылдық дамудан кейін ұсынылды алғашқы негізгі шығарылым Deno 1.0, JavaScript және TypeScript тілдеріндегі қолданбаларды дербес орындауға арналған платформа, оны серверде жұмыс істейтін өңдеушілерді жасау үшін пайдалануға болады. Платформаны жасаған Райан Дал (Райан Дал), Node.js жасаушысы. Node.js сияқты, Deno JavaScript қозғалтқышын пайдаланады V8, ол Chromium негізіндегі браузерлерде де қолданылады. Сонымен қатар, Deno Node.js шанышқысы емес, ол нөлден жасалған жаңа жоба болып табылады. Жоба коды таралады MIT лицензиясы бойынша. Ассамблеялар дайындалды Linux, Windows және macOS үшін.

Нұсқаның маңызды нөмірі қолданбалардың ОЖ-мен өзара әрекеттесуіне жауап беретін Deno аттар кеңістігіндегі API интерфейстерін тұрақтандырумен байланысты. Осы уақытқа дейін бар бағдарламалық интерфейстер тұрақтанбаған, әдепкі бойынша жасырылады және тек “--тұрақсыз” режимінде жұмыс істегенде қол жетімді. Жаңа нұсқалар пайда болған сайын мұндай API интерфейстері бірте-бірте тұрақты болады. setTimeout() және fetch() сияқты жалпы функцияларды қамтитын жаһандық аттар кеңістігіндегі API кәдімгі веб-шолғыштардың API интерфейсіне мүмкіндігінше жақын және браузерлерге арналған веб-стандарттарға сәйкес әзірленген. Тікелей платформа кодында қолданылатын Rust ұсынған API интерфейстері, сондай-ақ Deno жұмыс уақыты үшін плагиндерді әзірлеуге арналған интерфейс әлі тұрақтандырылған жоқ және дамуын жалғастыруда.

Жаңа JavaScript платформасын құрудың негізгі себептері тұжырымдамалық қателерді жоюға ұмтылу болды, мойындады Node.js архитектурасында және пайдаланушыларды қауіпсіз ортамен қамтамасыз етеді. Қауіпсіздікті жақсарту үшін V8 қозғалтқышы Rust тілінде жазылған, ол төмен деңгейлі жад манипуляциясынан кейін пайда болатын көптеген осалдықтарды болдырмайды, мысалы, бос қол жеткізу, нөлдік көрсеткіш сілтемелері және буфердің асып кетуі. Платформа блокталмаған режимде сұрауларды өңдеу үшін пайдаланылады Токио, сонымен қатар Rust тілінде жазылған. Токио көп ағынды қолдау және асинхронды режимде желілік сұрауларды өңдеу, оқиғаларға негізделген архитектураға негізделген жоғары өнімді қолданбаларды жасауға мүмкіндік береді.

басты әсіресе Дено:

  • Қауіпсіздікке бағытталған әдепкі конфигурация. Файлға қатынасу, желіге қосылу және қоршаған ортаның айнымалы мәндеріне қол жеткізу әдепкі бойынша өшірілген және анық түрде қосылуы керек. Қолданбалар әдепкі бойынша оқшауланған құм жәшік орталарында жұмыс істейді және нақты рұқсаттарсыз жүйе мүмкіндіктеріне қол жеткізе алмайды;
  • JavaScript-тен тыс TypeScript үшін кірістірілген қолдау. Стандартты TypeScript компиляторы типтерді тексеру және JavaScript генерациялау үшін пайдаланылады, бұл V8 жүйесіндегі JavaScript талдауымен салыстырғанда өнімділікке әкеледі. Болашақта біз TypeScript түрін тексеру жүйесін енгізуді дайындауды жоспарлап отырмыз, ол TypeScript өңдеу өнімділігін шама бойынша жақсартады;
  • Орындау уақыты бір дербес орындалатын файл түрінде келеді («deno»). Deno көмегімен қолданбаларды іске қосу үшін жеткілікті жүктеп салу оның платформасы үшін бір орындалатын файл бар, өлшемі шамамен 20 Мбайт, оның сыртқы тәуелділігі жоқ және жүйеде арнайы орнатуды қажет етпейді. Сонымен қатар, deno монолитті қолданба емес, ол Rust ішіндегі жәшік пакеттерінің жинағы (deno_core, rusty_v8), оны бөлек қолдануға болады;
  • Бағдарламаны іске қосу кезінде, сондай-ақ модульдерді жүктеу үшін URL мекенжайын пайдалануға болады. Мысалы, Welcome.js бағдарламасын іске қосу үшін “deno https://deno.land/std/examples/welcome.js” пәрменін пайдалануға болады. Сыртқы ресурстардан алынған код жергілікті жүйеде жүктеледі және кэштеледі, бірақ ешқашан автоматты түрде жаңартылмайды (жаңарту үшін қолданбаны «--қайта жүктеу» жалаушасымен нақты іске қосу қажет);
  • Қолданбаларда HTTP арқылы желілік сұраныстарды тиімді өңдеу;платформа өнімділігі жоғары желілік қосымшаларды құруға арналған;
  • Deno-да да, қарапайым веб-шолғышта да орындалатын әмбебап веб-қосымшаларды жасау мүмкіндігі;
  • болуы модульдердің стандартты жиынтығы, оны пайдалану сыртқы тәуелділіктермен байланыстыруды қажет етпейді. Стандартты жинақтағы модульдер қосымша аудит пен үйлесімділік тестілеуінен өтті;
  • Орындалу уақытынан басқа, Deno платформасы пакет менеджері ретінде де әрекет етеді және код ішіндегі URL мекенжайы арқылы модульдерге қол жеткізуге мүмкіндік береді. Мысалы, модульді жүктеу үшін «https://deno.land/std/log/mod.ts» журналынан импорттау * кодында көрсетуге болады. URL арқылы сыртқы серверлерден жүктелген файлдар кэштеледі. Модуль нұсқаларына байланыстыру URL ішіндегі нұсқа нөмірлерін көрсету арқылы анықталады, мысалы, “https://unpkg.com/[электрондық пошта қорғалған]/dist/liltest.js»;
  • Құрылым тәуелділікті тексерудің біріктірілген жүйесін («deno info» пәрмені) және кодты пішімдеуге арналған утилитаны (deno fmt) қамтиды;
  • Барлық қолданба сценарийлерін бір JavaScript файлына біріктіруге болады.

Node.js айырмашылығы:

  • Deno npm пакет менеджерін пайдаланбайды
    және репозиторийлерге байланысты емес, модульдер URL мекенжайы немесе файл жолы арқылы адрестеледі және модульдердің өзін кез келген веб-сайтта орналастыруға болады;
  • Deno модульдерді анықтау үшін "package.json" қолданбайды;
  • API айырмашылығы, Deno ішіндегі барлық асинхронды әрекеттер уәдені қайтарады;
  • Deno файлдар, желі және орта айнымалылары үшін барлық қажетті рұқсаттардың нақты анықтамасын талап етеді;
  • Өңдеушілермен қамтамасыз етілмеген барлық қателер қолданбаның тоқтатылуына әкеледі;
  • Deno ECMAScript модуль жүйесін пайдаланады және require();
  • Deno кірістірілген HTTP сервері TypeScript тілінде жазылған және жергілікті TCP ұяшықтарының үстінде жұмыс істейді, ал Node.js HTTP сервері C тілінде жазылған және JavaScript үшін байланыстыруларды қамтамасыз етеді. Deno әзірлеушілері барлық TCP ұяшық қабатын оңтайландыруға және жалпы интерфейсті қамтамасыз етуге назар аударды. Deno HTTP сервері төмен өткізу қабілеттілігін қамтамасыз етеді, бірақ болжанатын төмен кідіріске кепілдік береді. Мысалы, сынақта Deno HTTP серверіне негізделген қарапайым қосымша 25 миллисекунд максималды кідіріспен секундына 1.3 мың сұранысты өңдей алды. Node.js жүйесінде ұқсас қолданба секундына 34 мың сұрауды өңдеді, бірақ кешігулер 2 және 300 миллисекунд аралығында болды.
  • Deno Node.js (NPM) пакеттерімен үйлесімді емес, бірақ бөлек әзірленуде аралық қабат стандартты Node.js кітапханасымен үйлесімділік үшін, ол дамып келе жатқан сайын, Node.js үшін жазылған қосымшалардың саны барған сайын Deno жүйесінде жұмыс істей алады.
  • Ақпарат көзі: opennet.ru

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