Създателят на Node.js представи защитена JavaScript платформа Deno 1.0

След двугодишна разработка представен първото значително издание Deno 1.0, платформа за изолирано изпълнение на приложения на JavaScript и TypeScript, която може да се използва за създаване на обработчици, работещи на сървъра. Платформата се развива от Райан Дал (Ryan Dahl), създателят на Node.js. Както в Node.js, в Deno се използва JavaScript-движок V8, който също така се прилага в браузъри, базирани на Chromium. В същото време Deno не е клон на Node.js, а представлява напълно нов проект, създаден от нулата. Кодът на проекта разпространява е с лиценз MIT. Сборките са подготвени за Linux, Windows и macOS.

Същественото число на версията е свързано с стабилизацията на API в пространството на имената Deno, които отговарят за взаимодействието на приложенията с ОС. Програмните интерфейси, които все още не са стабилизирани, по подразбиране са скрити и достъпни само при стартиране в режим „—unstable“. С времето на формиране на нови версии такива API постепенно ще бъдат преместени в категорията на стабилните. API в глобалното пространство от имена, включващо общи функции като setTimeout() и fetch(), по възможност е близо до API на обикновените уеб браузъри и се развива в съответствие с уеб стандартите за браузъри. Предоставените Rust API, които се използват директно в кода на платформата, както и интерфейсът за разработка на плъгини за Deno runtime, засега не са стабилизирани и продължават да се развиват.

Ключовите мотиви за създаването на новата JavaScript платформа бяха желанието да се отстранят концептуалните грешки, допуснати в архитектурата на Node.js, и да се предостави на потребителите по-защитена среда. За повишаване на сигурността обвивката около V8 движка е написана на Rust, който позволява избягването на много уязвимости, произтичащи от ниско ниво работа с паметта, като например достъп до освобождавана памет, разименуване на нулеви указатели и излизане извън границите на буфера. За обработка на заявки в неблокиращ режим се използва платформата Tokio, също написана на Rust. Tokio позволява създаването на високопроизводителни приложения, базирани на събитийно-ориентирана архитектура (Event-driven), поддържащи многопоточност и обработка на мрежови заявки в асинхронен режим.

Основни характеристики Deno:

  • Ориентация за сигурност в конфигурацията по подразбиране. Обращенията към файлове, мрежовите възможности и достъпът до променливи от среда по подразбиране са блокирани и изискват явно включване. Приложенията по подразбиране се стартират в изолирани среда за тестване и не могат да получат достъп до системни функции без предоставяне на явни права;
  • Вградена поддръжка на TypeScript, освен JavaScript. За проверка на типовете и генериране на JavaScript се използва вграден компилатор TypeScript, което води до спад в производителността в сравнение с разбор на JavaScript в V8. В бъдеще се планира създаването на собствена реализация на системата за проверка на типовете TypeScript, което ще позволи значително повишаване на производителността при обработката на TypeScript;
  • Runtime се предоставя под формата на един самодостатъчен изпълним файл ("deno"). За стартиране на приложения с Deno е достатъчно да се изтегли за своята платформа един изполняем файл, с размер около 20 Мб, който няма външни зависимости и не изисква специална инсталация в системата. В същото време Deno не е монолитно приложение, а представлява колекция от crate-пакети на Rust (deno_core, rusty_v8), които могат да се използват по отделно;
  • При стартиране на програмата, а също така за зареждане на модули, може да се използва адресиране чрез URL. Например, за стартиране на програмата welcome.js може да се използва командата "deno https://deno.land/std/examples/welcome.js". Кодът от външни ресурси се зарежда и кешира на локалната система, но никога не се обновява автоматично (за обновяване е необходимо явно да се стартира приложението с флага "—reload");
  • Ефективна обработка на HTTP мрежови заявки, платформата е проектирана за създаване на високопроизводителни мрежови приложения;
  • Възможност за създаване на универсални уеб-приложения, които могат да се изпълняват както в Deno, така и в обикновен уеб браузър;
  • Наличието на стандартен набор от модули, използването на които не изисква свързване с външни зависимости. Модулите от стандартната колекция са преминали допълнителен одит и проверка за съвместимост;
  • Освен runtime, платформата Deno също играе ролята на пакетен мениджър и позволява в кода да се обраща към модули по URL. Например, за зареждане на модул може да се укаже в кода "import * as log from "https://deno.land/std/log/mod.ts". Файловете, заредени от външни сървъри по URL, се кешират. Версиите на модулите се определят чрез указатели на номера на версиите в URL, например "https://unpkg.com/liltest@0.0.5/dist/liltest.js";
  • Вградената система за инспектиране на зависимости (командата «deno info») и инструментът за форматиране на код (deno fmt) са интегрирани.
  • Всички скриптове на приложението могат да бъдат обединени в един JavaScript файл.

Разлики от Node.js:

  • Deno не използва пакетен мениджър npm
    и не се привързва към хранилища, адресацията на модулите става чрез URL или по файлов път, а самите модули могат да се разполагат на всеки сайт;
  • В Deno не се използва «package.json» за определяне на модулите;
  • Различие в API, всички асинхронни действия в Deno връщат promise;
  • Deno изисква ясно определяне на всички необходими разрешения за файлове, мрежа и променливи на средата;
  • Всички грешки, които нямат обработка, водят до приключване на изпълнението на приложението;
  • В Deno се прилага система от модули ECMAScript и не се поддържа require();
  • Вграденото HTTP-сървър на Deno е написано на TypeScript и работи върху нативни TCP-сокети, а HTTP-сървърът на Node.js е написан на C и предоставя свързвания за JavaScript. Разработчиците на Deno са насочили усилията си към оптимизиране на целия слой TCP-сокети и осигуряване на по-общ интерфейс. HTTP-сървърът на Deno осигурява по-нисък капацитет, но гарантира предсказуемо ниски забавяния. Например, в тест приложението, базирано на Deno HTTP сървър, успя да обработи 25 хиляди заявки в секунда с максимално забавяне от 1.3 милисекунди. В Node.js аналогичното приложение обработи 34 хиляди заявки в секунда, но забавянията варираха между 2 и 300 милисекунди.
  • Deno не е съвместим с пакети за Node.js (NPM), но се развива отделно слой за съвместимост със стандартната библиотека на Node.js, по мярка на развитието на която в Deno ще могат да се стартират все повече приложения, написани за Node.js.
  • Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster