Изучите Deno и выйдите за рамки Node.js

Опубликовано: 2023-04-20

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

Deno, более популярная из двух новых сред выполнения, решает некоторые проблемы безопасности, присущие Node.js, и обеспечивает более полную поддержку таких технологий, как TypeScript и WebAssembly.

В этой статье вы изучите основы Deno, узнаете, как он сравнивается с Node.js и Bun, и последуете практической демонстрации, в которой Deno используется для создания простого веб-сервера HTTP.

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

Когда разработчики познакомились с JavaScript, они увидели его потенциал для программирования на локальных машинах. Поэтому они создали среды выполнения на стороне сервера — среды, которые позволяют выполнять код JavaScript на машинах без использования браузера.

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

Некоторые из основных преимуществ Deno включают следующее:

  • Безопасность по умолчанию — пользователь должен явно разрешить коду доступ к сети, файловой системе или среде.
  • Встроенная поддержка TypeScript и WebAssembly . Запускать программы TypeScript и WebAssembly в Deno так же просто, как запускать программы JavaScript. Среда выполнения компилирует языки так же, как и JavaScript.
  • Децентрализованный менеджер пакетов . Вместо того, чтобы полагаться на репозиторий пакетов , такой как npm или менеджер пакетов Bun, Deno может импортировать код напрямую из URL-адресов. Эта возможность означает, что вы можете загружать зависимости из любого места, где они размещены, включая ваш репозиторий GitHub, сервер или CDN. Deno также предлагает услугу размещения скриптов для еще более легкого доступа.
  • Соответствие веб-стандартам — Deno стремится следовать тем же API, что и браузеры, а это означает, что код, написанный для браузеров, легко транслируется в среду выполнения.

Крупные компании и основные игроки отрасли, такие как Slack, Netlify и Supabase, приняли Deno, но среди веб-разработчиков его внедрение было менее распространенным. Согласно опросу Stack Overflow 2022 года, только 1,47% профессиональных разработчиков, принявших участие в опросе, использовали Deno, а 46,31% сообщили об использовании Node.js.

Может ли Deno стать будущим веб-разработки? Откройте для себя его преимущества, посмотрите, как он сочетается с Node.js и Bun, и попробуйте практическую демонстрацию — все в этом руководстве! Нажмите, чтобы твитнуть

Что делает Дено?

Как и любая среда выполнения JavaScript, Deno позволяет разработчикам запускать JavaScript на стороне сервера. В результате вы можете использовать Deno для выполнения самых разных задач программирования.

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

Вы также можете использовать Deno для задач программирования более низкого уровня, таких как создание инструмента командной строки для управления вашими задачами через терминал. Другими словами, вы можете использовать Deno для достижения тех же целей, что и при использовании таких языков, как Python или Ruby.

Дено против узла

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

Для команд, работающих над серверными проектами JavaScript, Deno стал жизнеспособной альтернативой Node. И хотя их схожая функциональность убедила некоторых разработчиков в том, что Deno может заменить Node.js, такая возможность маловероятна по нескольким ключевым причинам.

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

В отличие от этого, Deno является новым: версия 1.0 была выпущена в мае 2020 года, поэтому относительно немногие разработчики успели поиграть с ней. Изучение нового инструмента удлиняет сроки разработки. Кроме того, неясно, принесет ли Deno существенную пользу многим простым проектам.

Но если вы создаете приложение в области, где безопасность имеет важное значение, например, в финансах, возможности безопасности Deno могут сделать переход стоящим.

Дено против Бан

Бывший инженер Stripe Джарред Самнер впервые выпустил Bun в июле 2022 года для бета-тестирования. Bun — это более экспериментальная среда выполнения, чем Deno, и, в отличие от Deno, разработана для обеспечения широкой обратной совместимости с Node.js.

Bun также может похвастаться невероятно высокой производительностью, превосходящей Node.js и Deno. Основные функции обеспечивают следующие возможности:

  • Улучшенный движок — вместо движка Google V8 JavaScript и Web Assembly Bun использует более быстрый и эффективный JavaScriptCore в качестве базового движка JavaScript.
  • Больше контроля над кодом — Bun написан на Zig, низкоуровневом языке, который обеспечивает больший контроль над выполнением кода, чем JavaScript.
  • Точно настроенная эффективность . Команда, работающая над Bun, уделяла приоритетное внимание профилированию, сравнительному тестированию и оптимизации во время разработки, чтобы обеспечить эффективность кода.

Бан настолько новый, что поддержка сообщества относительно незначительна в устранении неполадок. Тем не менее, Бан может быть интересным для экспериментов. Команды, которым конкретно требуется повышение производительности, могут найти Bun полезным для своих проектов, но веб-разработка часто отдает приоритет другим факторам, а не производительности.

Начало работы с Дено

Теперь, когда вы немного узнали о Deno и его сравнении с другими популярными средами выполнения JavaScript, пришло время посмотреть, как он работает. В этом разделе вы узнаете, как создать простой сервер в Deno, который отвечает на HTTP-запросы «Привет с сервера!»

Установка Дено

Вы можете установить Deno на машину как бинарный исполняемый файл, используя эти инструкции по установке из официальной документации. Например, в macOS вы можете установить Deno с помощью команды brew install deno .

Другой способ начать работу с Deno — установить его как пакет npm, например:

Создайте папку для своего проекта (возможно, deno_example ) и запустите в ней команду npm init . (Вы можете принять все параметры по умолчанию, предложенные init , поскольку он создает базовый файл package.json .)

После инициализации приложения запустите npm install deno-bin чтобы установить двоичный пакет Deno. Теперь вы можете обновить файл package.json , чтобы разрешить запуск приложения с помощью npm start . Добавьте жирную строку ниже к свойству объекта «scripts» в файле package.json по умолчанию:

 "scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },

Это дополнение сценария позволяет Deno запускать модуль app.ts с сетевыми привилегиями ( --allow-net ). Помните, что при работе с Deno вам необходимо явно разрешить доступ к сети или файловой системе.

Теперь вы готовы создать модуль app.ts , отвечающий за прослушивание порта и обслуживание запросов пользователей.

Создание модуля App.ts

Создать базовый сервер в Deno очень просто. Сначала создайте файл app.ts и вставьте в него следующий код:

 import { serve } from "https://deno.land/[email protected]/http/server.ts"; serve((_req) => new Response("Hello from the server!"), { port: 8000 });

В коде используется функция serve из server.ts Deno library хранящейся на официальном сайте Deno.land. Этот код также предоставляет обработчик функции serve для входящих запросов. Функция-обработчик отвечает на каждый запрос «Привет с сервера!»

Функция serve также принимает необязательные параметры, такие как номер порта, на котором вы хотите обслуживать. Здесь пример кода использует эти параметры для обслуживания порта 8000.

Затем запустите сервер, запустив npm start . Это должно запустить сервер, который прослушивает localhost:8000 и отвечает на запросы приветствием.

Сервер Deno в действии
Сервер Deno в действии

Если вы хотите расширить сервер до полнофункционального API, вам, вероятно, потребуется добавить возможность подключения к базе данных. Это легко сделать, поскольку сообщество Deno создало драйверы, поддерживающие популярные базы данных, такие как MariaDB/MySQL, PostgreSQL, MongoDB и другие.

Deno предлагает дополнительную безопасность и лучший опыт разработки, но подходит ли он вам? Погрузитесь в это руководство, чтобы узнать, как оно сравнивается с Node.js и Bun Click to Tweet

Краткое содержание

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

Node.js хорошо подходит для большинства проектов. Он имеет большую экосистему и большое сообщество, которое может помочь с широким спектром сценариев устранения неполадок.

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

Наконец, хотя Bun слишком экспериментальен для большинства профессиональных проектов, это уникальная и забавная среда выполнения, которую можно выбрать для личного проекта или для расширения.

В целом, Deno предлагает баланс между преимуществами Node.js и экспериментальными возможностями Bun. В то время как Node.js является удобным выбором для большинства проектов, Deno может быть в авангарде того, как веб-разработка будет развиваться в будущем.

Тем временем попрактикуйтесь в своих навыках Deno, подписавшись на уровень хобби хостинга приложений Kinsta — кодируйте сейчас, а масштабируйте позже.