Cyflwynodd awdur Node.js y platfform JavaScript diogel Deno 1.0

Ar ôl dwy flynedd o ddatblygiad wedi'i gyflwyno datganiad mawr cyntaf Rhowch 1.0 i mi, llwyfan ar gyfer gweithredu cymwysiadau yn JavaScript a TypeScript yn annibynnol, y gellir eu defnyddio i greu trinwyr sy'n rhedeg ar y gweinydd. Datblygir y platfform gan Ryan Dahl (Ryan Dahl), creawdwr Node.js. Fel Node.js, mae Deno yn defnyddio injan JavaScript V8, a ddefnyddir hefyd mewn porwyr sy'n seiliedig ar Gromiwm. Ar yr un pryd, nid yw Deno yn fforc o Node.js, ond mae'n brosiect newydd a grëwyd o'r dechrau. Cod prosiect dosbarthu gan dan drwydded MIT. Cymanfaoedd parod ar gyfer Linux, Windows a macOS.

Mae'r rhif fersiwn sylweddol yn gysylltiedig â sefydlogi'r APIs yn gofod enwau Deno, sy'n gyfrifol am ryngweithio cymwysiadau â'r OS. Rhyngwynebau meddalwedd sydd wedi hyd yn hyn heb ei sefydlogi, wedi'u cuddio yn ddiofyn a dim ond ar gael wrth redeg yn y modd “--ansefydlog”. Wrth i fersiynau newydd gael eu ffurfio, bydd APIs o'r fath yn dod yn sefydlog yn raddol. Mae'r API yn y gofod enwau byd-eang, sy'n cynnwys swyddogaethau cyffredin fel setTimeout() a fetch(), mor agos â phosibl i API porwyr gwe confensiynol ac fe'i datblygir yn unol â safonau Gwe ar gyfer porwyr. Nid yw'r APIs a ddarperir gan Rust, a ddefnyddir yn uniongyrchol yn y cod platfform, yn ogystal â'r rhyngwyneb ar gyfer datblygu ategion ar gyfer amser rhedeg Deno, wedi'u sefydlogi eto ac maent yn parhau i ddatblygu.

Y cymhellion allweddol ar gyfer creu llwyfan JavaScript newydd oedd yr awydd i ddileu gwallau cysyniadol, cyfaddef ym mhensaernïaeth Node.js, a darparu amgylchedd mwy diogel i ddefnyddwyr. Er mwyn gwella diogelwch, mae'r injan V8 wedi'i hysgrifennu yn Rust, sy'n osgoi llawer o'r gwendidau sy'n deillio o drin cof lefel isel, megis mynediad heb ddim ar ôl, cyfeiriadau pwyntydd null, a gor-redeg byffer. Defnyddir y platfform i brosesu ceisiadau yn y modd di-flocio Tokio, a ysgrifennwyd hefyd yn Rust. Mae Tokio yn caniatáu ichi greu cymwysiadau perfformiad uchel yn seiliedig ar bensaernïaeth sy'n cael ei gyrru gan ddigwyddiadau, gan gefnogi ceisiadau rhwydwaith aml-edafu a phrosesu mewn modd asyncronig.

Y prif Nodweddion Deno:

  • Cyfluniad rhagosodedig sy'n canolbwyntio ar ddiogelwch. Mae mynediad ffeil, rhwydweithio, a mynediad at newidynnau amgylchedd wedi'u hanalluogi yn ddiofyn a rhaid eu galluogi'n benodol. Mae cymwysiadau'n rhedeg yn ddiofyn mewn amgylcheddau blychau tywod ynysig ac ni allant gael mynediad i alluoedd system heb roi caniatâd penodol;
  • Cefnogaeth fewnol ar gyfer TypeScript y tu hwnt i JavaScript. Ar gyfer gwirio math a chynhyrchu JavaScript, defnyddir y casglwr TypeScript safonol, sy'n arwain at daro perfformiad o'i gymharu â dosrannu JavaScript yn V8. Yn y dyfodol, rydym yn bwriadu paratoi ein gweithrediad ein hunain o'r system wirio math TypeScript, a fydd yn gwella perfformiad prosesu TypeScript yn ôl trefn maint;
  • Daw amser rhedeg ar ffurf un ffeil weithredadwy hunangynhwysol (“deno”). I redeg cymwysiadau gan ddefnyddio Deno mae'n ddigon llwytho i fyny ar gyfer ei blatfform mae un ffeil gweithredadwy, tua 20 MB o faint, nad oes ganddi ddibyniaethau allanol ac nad oes angen unrhyw osodiad arbennig ar y system. Ar ben hynny, nid yw deno yn gymhwysiad monolithig, ond mae'n gasgliad o becynnau crât yn Rust (deno_craidd, rhydlyd_v8), y gellir ei ddefnyddio ar wahân;
  • Wrth gychwyn y rhaglen, yn ogystal ag ar gyfer llwytho modiwlau, gallwch ddefnyddio cyfeiriadau URL. Er enghraifft, i redeg y rhaglen welcome.js, gallwch ddefnyddio'r gorchymyn “deno https://deno.land/std/examples/welcome.js”. Mae cod o adnoddau allanol yn cael ei lawrlwytho a'i storio ar y system leol, ond nid yw byth yn cael ei ddiweddaru'n awtomatig (mae diweddaru yn gofyn am redeg y rhaglen yn benodol gyda'r faner "--reload");
  • Prosesu ceisiadau rhwydwaith yn effeithlon trwy HTTP mewn cymwysiadau; mae'r platfform wedi'i gynllunio ar gyfer creu cymwysiadau rhwydwaith perfformiad uchel;
  • Y gallu i greu cymwysiadau gwe cyffredinol y gellir eu gweithredu yn Deno ac mewn porwr gwe rheolaidd;
  • argaeledd set safonol o fodiwlau, nad yw'r defnydd ohono yn gofyn am rwymo i ddibyniaethau allanol. Mae modiwlau o'r casgliad safonol wedi cael eu harchwilio'n ychwanegol a phrofi cydweddoldeb;
  • Yn ogystal ag amser rhedeg, mae platfform Deno hefyd yn gweithredu fel rheolwr pecyn ac yn caniatáu ichi gyrchu modiwlau trwy URL y tu mewn i'r cod. Er enghraifft, i lwytho modiwl, gallwch nodi yn y cod “mewnforio * fel log o “https://deno.land/std/log/mod.ts”. Mae ffeiliau sy'n cael eu lawrlwytho o weinyddion allanol trwy URL yn cael eu storio. Pennir rhwymo i fersiynau modiwl trwy nodi rhifau fersiwn y tu mewn i'r URL, er enghraifft, “ https://unpkg.com/[e-bost wedi'i warchod]/dist/liltest.js";
  • Mae'r strwythur yn cynnwys system arolygu dibyniaeth integredig (y gorchymyn “deno info”) a chyfleustodau ar gyfer fformatio cod (deno fmt);
  • Gellir cyfuno holl sgriptiau cais yn un ffeil JavaScript.

Gwahaniaethau o Node.js:

  • Nid yw Deno yn defnyddio rheolwr pecyn npm
    ac nad yw'n gysylltiedig ag ystorfeydd, rhoddir sylw i fodiwlau trwy URL neu lwybr ffeil, a gellir gosod y modiwlau eu hunain ar unrhyw wefan;
  • Nid yw Deno yn defnyddio "package.json" i ddiffinio modiwlau;
  • Gwahaniaeth API, mae pob gweithred asyncronig yn Deno yn dychwelyd addewid;
  • Mae Deno yn gofyn am ddiffiniad clir o'r holl ganiatadau angenrheidiol ar gyfer ffeiliau, rhwydwaith ac amgylchedd newidynnau;
  • Mae pob gwall na ddarperir gyda thrinwyr yn arwain at derfynu'r cais;
  • Mae Deno yn defnyddio system modiwlau ECMAScript ac nid yw'n cefnogi gofyniad();
  • Mae gweinydd HTTP adeiledig Deno wedi'i ysgrifennu yn TypeScript ac mae'n rhedeg ar ben socedi TCP brodorol, tra bod gweinydd HTTP Node.js wedi'i ysgrifennu yn C ac yn darparu rhwymiadau ar gyfer JavaScript. Mae datblygwyr Deno wedi canolbwyntio ar optimeiddio'r haen soced TCP gyfan a darparu rhyngwyneb mwy cyffredinol. Mae Gweinydd Deno HTTP yn darparu trwygyrch is ond yn gwarantu hwyrni isel rhagweladwy. Er enghraifft, yn y prawf, roedd cymhwysiad syml yn seiliedig ar weinydd Deno HTTP yn gallu prosesu 25 mil o geisiadau yr eiliad gydag uchafswm hwyrni o 1.3 milieiliad. Yn Node.js, roedd cais tebyg yn prosesu 34 mil o geisiadau yr eiliad, ond roedd yr hwyrni yn amrywio o 2 a 300 milieiliad.
  • Nid yw Deno yn gydnaws â phecynnau ar gyfer Node.js (NPM), ond mae'n cael ei ddatblygu ar wahân interlayer ar gyfer cydnawsedd â'r llyfrgell Node.js safonol, wrth iddo ddatblygu, bydd mwy a mwy o geisiadau a ysgrifennwyd ar gyfer Node.js yn gallu rhedeg yn Deno.
  • Ffynhonnell: opennet.ru

Ychwanegu sylw