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 тилинде жазылган, ал төмөнкү деңгээлдеги эстутум манипуляциясынан келип чыккан, эркин кирүү, нөл көрсөткүчтү жокко чыгаруу жана буферди ашыкча алуу сыяктуу көптөгөн алсыздыктардан качат. Платформа суроо-талаптарды бөгөттөгөн режимде иштетүү үчүн колдонулат Tokio, ошондой эле Rust менен жазылган. Токио сизге асинхрондук режимде көп ырааттуулукту колдоо жана тармактык суроо-талаптарды иштетүү, окуяларга негизделген архитектуранын негизинде жогорку өндүрүмдүүлүктөгү тиркемелерди түзүүгө мүмкүндүк берет.

негизги өзгөчөлүктөрү Дено:

  • Коопсуздукка багытталган демейки конфигурация. Файлга кирүү, тармактык жана чөйрө өзгөрмөлөрүнүн мүмкүнчүлүгү демейки боюнча өчүрүлгөн жана ачык түрдө иштетилиши керек. Тиркемелер демейки боюнча обочолонгон кумдук чөйрөлөрдө иштейт жана ачык уруксаттарсыз системанын мүмкүнчүлүктөрүнө кире албайт;
  • JavaScript'тен тышкары TypeScript үчүн орнотулган колдоо. Стандарттык TypeScript компилятору түрлөрүн текшерүү жана JavaScriptти түзүү үчүн колдонулат, бул V8деги JavaScript талдоосуна салыштырганда натыйжалуулукка алып келет. Келечекте биз TypeScript түрүн текшерүү системасын өзүбүздүн ишке ашырууну даярдоону пландап жатабыз, ал TypeScript иштетүү көрсөткүчтөрүн чоңдукка жараша жакшыртат;
  • Runtime бир өз алдынча аткарылуучу файл түрүндө келет («дено»). Deno аркылуу тиркемелерди иштетүү үчүн жетиштүү жүктөп алуу анын платформасы үчүн бир аткарылуучу файл бар, көлөмү болжол менен 20 МБ, анын тышкы көз карандылыгы жок жана системага атайын орнотууну талап кылбайт. Мындан тышкары, deno монолиттүү тиркеме эмес, бирок Rust ичиндеги куту пакеттеринин жыйындысы (deno_core, rusty_v8), өзүнчө колдонулушу мүмкүн;
  • Программаны баштаганда, ошондой эле модулдарды жүктөө үчүн сиз URL дарегин колдоно аласыз. Мисалы, Welcome.js программасын иштетүү үчүн “deno https://deno.land/std/examples/welcome.js” буйругун колдонсоңуз болот. Тышкы ресурстардан алынган код локалдык системада жүктөлүп алынат жана кэштелет, бирок эч качан автоматтык түрдө жаңыланбайт (жаңыртуу үчүн тиркемени “--reload” желекчеси менен ачык иштетүү талап кылынат);
  • Тиркемелерде HTTP аркылуу тармактык суроо-талаптарды эффективдүү иштетүү; платформа жогорку натыйжалуу тармактык тиркемелерди түзүү үчүн иштелип чыккан;
  • Денодо да, кадимки веб-браузерде да аткарыла турган универсалдуу веб-тиркемелерди түзүү мүмкүнчүлүгү;
  • болушу модулдардын стандарттуу топтому, аны колдонуу тышкы көз карандылыкты талап кылбайт. Стандарттык коллекциядагы модулдар кошумча аудиттен жана шайкештикти текшерүүдөн өткөн;
  • Иштөө убактысынан тышкары, 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 ECMAScript модулдук системасын колдонот жана талапты колдобойт();
  • Денонун орнотулган HTTP сервери TypeScript менен жазылган жана жергиликтүү TCP розеткаларынын үстүндө иштейт, ал эми Node.js HTTP сервери C тилинде жазылган жана JavaScript үчүн байланыштарды камсыз кылат. Денонун иштеп чыгуучулары бүт TCP розетка катмарын оптималдаштырууга жана жалпы интерфейсти камсыз кылууга басым жасашкан. Deno HTTP Server төмөн өткөрүү жөндөмдүүлүгүн камсыз кылат, бирок болжолдуу аз күтүү мөөнөтүн кепилдик берет. Мисалы, тестте Deno HTTP серверине негизделген жөнөкөй тиркеме секундасына 25 миң суроо-талапты 1.3 миллисекунддук максималдуу кечигүү менен иштете алган. Node.js ичинде окшош тиркеме секундасына 34 миң суроону иштеткен, бирок кечигүү 2 жана 300 миллисекундга чейин өзгөргөн.
  • Deno Node.js (NPM) пакеттери менен шайкеш келбейт, бирок өзүнчө иштелип жатат аралык катмар стандарттуу Node.js китепканасына шайкеш келүү үчүн, ал өнүгүп келе жаткан сайын, Node.js үчүн жазылган тиркемелер Deno'до иштей алат.
  • Source: opennet.ru

Комментарий кошуу