Авторът на 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 позволява създаването на високо производителни приложения на база на събитийно-ориентирана архитектура, поддържаща многопоточност и асинхронна обработка на мрежови заявки.

Основни особености Deno:

  • Ориентиране към сигурност в конфигурацията по подразбиране. Достъпът до файлове, мрежови функции и достъп до променливи на средата е по подразбиране блокиран и изисква явно разрешение. Приложенията по подразбиране се стартират в изолирани sandbox среди и нямат достъп до системни функции без предоставяне на явни разрешения;
  • Вградена поддръжка на 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