Создатель платформы для JavaScript-разработки Node.js Райан Даль выпустил первый официальный релиз нового проекта – Deno 1.0. Это защищенная платформа, которая позволит создавать и обособленно выполнять приложения на JavaScript и TypeScript.
Безопасная и открытая платформа
Разработка Deno стартовала около двух лет назад. Как и Node.js, а также браузеры на базе Chromium, новая платформа использует JavaScript-движок V8.
Но Deno – не очередной этап развития Node.js. Это абсолютно самостоятельная платформа, которая лучше защищена и работает стабильнее.
В целом Deno создан для производительных web-приложений. Они могут выполняться на самой платформе или в любом современном браузере.
По словам Даля, в Deno он стремился избавиться от основных ошибок в архитектуре, сделанных в Node.js, и повысить безопасность окружения. Для создания обвязки движка V8 он использовал язык Rust. Его инструменты позволяют избежать проблем, связанных с неправильной низкоуровневой работой с памятью. К примеру, Rust не даст обратиться по адресу к уже освобожденной памяти, выйти за границы буфера или разыменовать нулевой указатель.
В неблокирующем режиме запросы Deno обрабатывает платформа Tokio. Она также написана на Rust и использует модель событийно-ориентированной архитектуры (Event-driven). Tokio эффективно работает в асинхронном режиме и поддерживает многопоточность.
Deno распространяется под лицензией MIT. Сборки Deno 1.0 можно загрузить для Linux, Windows и macOS.
Часть программных интерфейсов пока скрыта. Доступ к ним можно получить, только если запустить Deno с ключом --unstable.
Чем Deno отличается от Node.js
Deno не привязан к конкретным репозиториям и не использует пакетный менеджер npm. Прослойка, которая обеспечит совместимость новой платформы с Node.js, активно развивается. Она позволит запускать в Deno приложения для Node.js.
Модули платформы могут размещаться на любом сайте, поддерживается их адресация через файловые пути и URL. Используется система модулей ECMAScript, функция require() не поддерживается.
Структур «package.json» для определения модулей здесь тоже нет. Для всех файлов, переменных окружения и сетей в Deno нужно указывать полномочия явно.
Асинхронные действия в Deno API возвращают promise. Если в работе приложения возникла ошибка, которой не поставлен в соответствие обработчик, то оно завершит работу.
Deno поддерживает TypeScript, тогда как Node.js может работать только с JavaScript. Штатный компилятор TypeScript используется для проверки типов и генерации JavaScript. Даль планирует создать собственную систему проверки типов, чтобы повысить производительность решения.
Преимущества Deno
Чтобы запустить Deno в рантайме, достаточно одного исполняемого файла размером около 20 Мб. Он не имеет внешних зависимостей, хотя и является коллекцией отдельных crate-пакетов на Rust (deno_core, rusty_v8).
В Deno конфигурации по умолчанию ориентированы на достижение максимальной безопасности. Приложения запускаются в изолированных песочницах и не имеют доступа к системе, пока вы явно его не предоставите.
Код с внешних ресурсов для Deno можно запускать через URL. Он кешируется на локальной машине и по умолчанию автоматически не обновляется. Все скрипты Deno-приложения можно объединить в единственный JavaScript-файл.
Deno включает HTTP-сервер на TypeScript. Он работает поверх нативных TCP-сокетов, чтобы предоставить разработчикам более простой и универсальный интерфейс. Минус решения – снижение пропускной способности, плюс – гарантированно предсказуемые задержки. За секунду он обрабатывает 25 тыс. запросов, максимальная задержка в тестах – 1,3 мс.
Напомним, в Node.js встроенный сервер написан на С, и он предполагает привязку для JavaScript. При этом в тестах сервер Node.js обработал за секунду 34 тыс. запросов, но время задержек колебалось от 2 до 300 мс.