Доброго времени суток.
Представляю вашему вниманию перевод статьи «Deno vs. Node.js — Here are the most Important Differences» автора Louis Petrik.
Является ли Deno новым Node.js? Или всего лишь хорошей альтернативой? В этой статье я постараюсь ответить на данные вопросы.
История появления Deno
Deno и Node.js являются разработками одного человека — Ryan Dahl.
Dahl работал над Node.js с 2009 года, но через несколько лет покинул команду. В 2018 году он выступил с докладом «10 вещей в Node.js, о которых я жалею». В этом докладе Dahl представил Deno — новый «движок»" для JavaScript и TypeScript.
Забавный факт: «Deno» является анаграммой «Node».
Следует ли разработчикам опасаться, что Deno в ближайшем будущем заменит Node.js?
Сам Dahl считает, что нет.
Ссылка на видео.
Как отмечает Dahl в своем выступлении, Deno пока уступает Node.js в завершенности (стабильности).
Впрочем, оба являются средой выполнения JS-кода за пределами браузера, например, на веб-сервере. Но едва ли кто-то может сказать, как будут складываться «отношения» между Node.js и Deno через несколько лет.
Deno и Node.js: внутреннее устройство
Node.js написан на C++ и использует V8 для выполнения JS-кода. V8 был специально разработан для Google Chrome для максимально быстрого выполнения JS-кода в браузере. В настоящее время почти все браузеры, включая Microsoft Edge, перешли на V8.
Deno также основан на V8, но вместо C++, в нем используется Rust — язык, целью которого является не только хорошая производительность, не уступающая C++, но и безопасность: исключение ошибок доступа к памяти или переполнения буфера.
Безопасность — один из главных недостатков Node.js, поскольку после запуска приложения, оно получает доступ к файловой системе или сети.
Deno пытается это исправить, запрашивая у пользователя разрешение на доступ.
Хорошим примером является следующий TS-код с официального сайта Deno:
import { serve } from 'https://deno.land/std@0.50.0/http/server.ts' const s = serve({ port: 8000 }) for await (const req of s) { req.respond({ body: 'Hello World\n'}) }
Как видите, это очень простой веб-сервер, который запускается так:
deno run app.ts
Однако поскольку Deno не предоставлено разрешение на доступ к сети, мы получаем следующее сообщение:
Для предоставления доступа, нужно сделать следующее:
deno run --allow-net app.ts
Теперь наш сервер работает. Но у приложения не будет доступа к файловой системе, пока мы этого не разрешим.
Прощай NPM, привет ES6 импорт
Еще одной проблемой безопасности наших приложений является NPM: мало того, что использование NPM приводит к созданию огромной папки «node_modules», так еще и устанавливаемые пакеты, обеспечивающие работу приложения, теоретически могут содержать вредоносный код.
Deno не использует NPM, вместо этого библиотеки импортируются через URL, как было показано в примере.
import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'
Библиотека загружается при первом выполнении и кэшируется:
Это похоже на то, как мы копируем код для нашего веб-сервера и храним его отдельно на сервере или компьютере в целях переиспользования. Библиотеки не нуждаются в перезагрузке.
Объект «Window» за пределами браузера
Window является глобальным объектом в браузере, содержащим некоторые очень важные JS-функции.
Одной из таких функций является «fetch». Fecth не может использоваться в Node.js — для этого существуют специальные библиотеки, а в Deno может.
Это связано с тем, что Deno имеет доступ к Window, как следует из документации.
Следующий код можно запустить как в браузере, так и в Deno:
fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => response.json) .then(data => console.log(data))
Поддержка TypeScript из коробки
Использование TypeScript, конечно, дело вкуса. Одним он нравится, другим — нет. Как бы то ни было, Deno поддерживает TypeScript из коробки и, разумеется, он также поддерживает JavaScript.
Это можно проверить, написав код, сохранив файл как .ts или .js, и запустив его с помощью deno run
. На мой взгляд, это не является существенным преимуществом, поскольку поддержка TypeScript может быть легко добавлена и в Node.js.
Благодарю за внимание.
ссылка на оригинал статьи https://habr.com/ru/post/504210/
Добавить комментарий