ТЕХНИЧЕСКИЕ ВЕЩИ | Бэкэнд

Deno — это новый Node.js — ну, вроде…

Почему парень, который создал Node.js, сделал новый Node.js?

Прошло три года с тех пор, как Райан Даль — тот же парень, что и Node.js — вывел Deno во всемирную паутину. Эта серверная часть с открытым исходным кодом и средой выполнения V8 имеет более 80 тысяч звезд на GitHub, 42 тысячи подписчиков в Twitter и 4,9 миллиона долларов начального капитала от различных инвесторов и корпорации Mozilla для ее коммерциализации.

Но что такое Дено? Чем Deno отличается от Node.js? и станет ли он новым Node.js?

Что такое Дено?

Когда Райан Даль, создатель Node.js, выпустил Deno в мае 2018 года — вы не могли не задаться вопросом: почему?

Во время JSConf EU 2018 Даль признал, что из Node.js были извлечены уроки, особенно в области безопасности, модулей и зависимостей. Первоначально Node.js был выпущен в 2008 году, и ландшафт веб-разработки отличался от сегодняшнего. Эти вещи не были в авангарде дизайнерского мышления, когда создавался Node.js, а JavaScript все еще считался уловкой, а не реальным и мощным языком программирования.

Deno, по сути, является возрождением Node.js — лучше, быстрее, с большей безопасностью и всеми уроками, которые Node.js не усвоил за 10 лет своего пребывания в качестве основы серверного программирования для JavaScript.

Но что такое Дено? В двух словах, Deno — это серверный движок, который позволяет вам писать код TypeScript для создания вашего бэкенда.

Чем Deno отличается от Node.js?

Когда дело доходит до Deno, его легко рассматривать как еще один Node.js. Но это не так. Deno по умолчанию безопасен. Это означает, что если вы явно не включите его, доступ ко всем файлам, сети и среде будет заблокирован. Это соответствует принципу наименьших привилегий, означающему, что любые утечки безопасности происходят из-за потери протоколов безопасности, а не из-за их недостаточной жесткости.

В отличие от Node.js, Deno по умолчанию ограничивает доступ к файловой системе, сети, выполнение других скриптов и переменных среды. Например, если вы создаете API, вам необходимо включить флаг --allow-net, чтобы открывать сетевые подключения.

Deno run --allow-net app.ts

Вот краткий список флагов безопасности для Deno:

  • --allow-write : флаг доступа к файловой системе
  • --allow-net : флаг для сетевых запросов
  • --allow-env : флаг доступа к окружению
  • --allow-run : флаг для запущенных подпроцессов

Deno также поддерживает TypeScript из коробки, поставляется в виде одного исполняемого файла, и нет необходимости поддерживать зависимости. Сторонние модули импортируются непосредственно из исходного кода, а затем кэшируются при первом запуске, а это означает, что вы можете попрощаться с package.json файлами и менеджерами пакетов.

Вот пример кода app.ts и того, как импортируются библиотеки:

import { Application } from "https://deno.land/x/oak/mod.ts";
import router from "./routes.ts";
const HOST = "127.0.0.1";
const PORT = 8080;
const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());
console.log(`Listening on port ${PORT} ...`);
await app.listen(`${HOST}:${PORT}`);

Однако загрузка внешних модулей с URL-адресов может показаться утомительной и создать проблемы, если ссылка по какой-либо причине изменится. Вам все равно нужно будет создать централизованный файл export, чтобы вы могли использовать его в нескольких местах.

Например, если у вас есть export ниже, расположенный в файле с именем local-utils:

export { test, assertEquals } from "https://deno.land/std/testing/mod.ts";

Вы можете использовать его снова следующим образом:

import { test, assertEquals } from './local-utils.ts';

Deno также кэширует выпуски модулей с открытым исходным кодом, хранящихся на GitHub, чтобы обеспечить время безотказной работы и легко запоминающиеся имена, которые структурированы как https://deno.land/x/<moduleNameHere> .

А как насчет скорости?

И Deno, и Node.js используют один и тот же движок Google V8. Так что, когда дело доходит до производительности, вы сравниваете почти одно и то же. Однако Deno построен на Rust. Напротив, Node.js построен на C++. Это может повлиять на производительность по мере роста приложения, но из-за относительной молодости Deno у нас нет корпоративных отчетов, которые можно было бы легко сравнить.

Однако у Deno есть сравнительный отчет, который часто сравнивают с Node.js, и он может показаться вам интересным. Когда дело доходит до пропускной способности HTTP, Deno отличается меньшей задержкой. Но в целом Deno и Node.js почти не уступают друг другу по скорости и производительности.

Дено и обещания

Обещания теперь являются основой серверной разработки, особенно в JavaScript. В отличие от Node.js, Deno использует промисы на всех возможных уровнях. Это означает, что все асинхронные методы по умолчанию возвращают обещания. Таким образом, вместо того, чтобы писать длинные обещания, вы можете просто использовать вместо них await.

Deno также имеет встроенную защиту от ошибок. Это означает, что ваше приложение автоматически завершится ошибкой, если API не содержит обработки ошибок.

Последний вопрос — заменит ли Deno Node.js?

Возможно, я могу написать о Deno еще много, но в одну часть можно вместить лишь несколько вещей, прежде чем она выйдет из-под контроля.

Node.js — краеугольный камень серверной разработки JavaScript. Он по-прежнему работает, сообщество по-прежнему сильное, и его не слишком раздражает использование. Deno не был создан для замены Node.js. Скорее, он был создан, чтобы предоставить альтернативное решение для Node.js.

Так заменит ли Deno Node.js?

Возможно нет. Однако по мере роста сообщества и защиты Deno будет расти и его поддержка и всеобщее принятие. Deno — новичок в мире, и с учетом возраста и дизайна он всегда будет проще в использовании. Deno не является форком Node. Это собственная реализация, основанная на современных возможностях JavaScript. Node.js был создан в то время, когда разработка на JavaScript не имела функций и функций, которыми мы наслаждаемся сегодня. Легко принять как должное такие вещи, как модули ES и TypeScript, когда вы достаточно долго в них погружены. Хотя Node.js по-прежнему несет в себе наследие старых дней JavaScript и его различные особенности разработки, он также укоренился в стартапах и предприятиях в качестве краеугольного программного обеспечения.

Короче говоря, Node.js продолжит оставаться рядом с Deno в качестве потенциальной альтернативы для стартапов, индивидуальных предпринимателей и предприятий на выбор. Подъем Deno не обязательно означает смерть Node.js. Скорее, он обеспечивает здоровую конкуренцию и поощряет как Node.js, так и Deno становиться лучше и проще в использовании, а также способствует расцвету новых идей в пространстве, известном как серверный JavaScript.

📌 <Free weekly code things, delivered every Sunday. />
+ Monthly delivery of a Second Code Brain notebook 
+ Exclusive code notes
+ Code recipes
+ Code philosophy and thoughts to build your general knowledge
{{👉: Subscribe here}}