Deno против Node.js: Шоу, о котором никто не просил, но которое всем было нужно

Хорошо, представь себе: 23:00, у меня в руках чашка кофе, которая по какой-то причине одновременно холодная и обжигающая (навык, который я освоил), и я спускаюсь в кроличью нору запуска JavaScript. Да, я знаю, дикий пятничный вечер, верно? Но, эй, когда ты программист, твоя идея “развлечения” иногда включает в себя сравнение Deno и Node.js, пока твой кот судит тебя с другого конца комнаты.

Чтобы немного вникнуть в эту идею, я манипулирую Node.js уже много лет. Это как те изношенные вещи в твоем гардеробе, от которых ты просто не можешь избавиться, потому что они все еще в рабочем (качественном) состоянии. Это удобно, но иногда ты думаешь о том, чтобы приобрести похожие, которые популярны на рынке – пересмотренные и новые варианты, понимаешь.

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

Первое Впечатление: Кто Вообще Называет Эти Вещи?

Вернувшись в конец 2000-х, когда технологии были еще в зачаточном состоянии, Node.js присутствовал в индустрии с 2009 года. Построенный на движке V8 от Chrome, Node.js постепенно помогает нам создавать масштабируемые приложения. Вы можете понять это как ту версию Javascript, которая является надежной и предпочтительной для всех в толпе.

На последней ноте, Deno был запущен в 2018 году. И да, он также был разработан тем же человеком, Райаном Далем, оригинальным создателем популярного Node.js. Поворот событий, правда? Он вернулся, указал на все, что, по его мнению, он испортил в Node, и затем сказал: “Держи мой кофе. Я это исправлю.” Deno родился с безопасностью, простотой и современными функциями в своей основе. А если вам интересно, откуда такое название… Честно говоря, я не знаю. Но Deno — это анаграмма слова Node, так что вот вам и это.

Раунд 1: Безопасность

Давайте поговорим о безопасности, потому что если вы хоть немного похожи на меня, у вас был хотя бы один момент “О нет, я случайно выставил ключ API на всеобщее обозрение”. (Мы больше не говорим об этом проекте.)

Node.js оставляет безопасность на усмотрение разработчика, что означает, что вам лучше знать, как работать с .env файлами и разрешениями — или else. А Deno? Это как один из тех параноидальных друзей, которых мы все имеем, и которые постоянно проверяют замки. В любом случае, Deno по умолчанию работает в защищенной песочнице, которая не позволяет вашему коду получать доступ к сети, файловой системе или даже переменным окружения, если не предоставлено явное разрешение.

Вот пример:

Node.js

JavaScript

 

Deno

JavaScript

 

Но если вы попытаетесь запустить этот код Deno без разрешений, вы получите большое сообщение об ошибке:

JavaScript

 

Да, Deno не шутит. Вам нужно будет явно передавать флаги, такие как --allow-write, когда вы запускаете скрипт. Это немного раздражает? Конечно. Но спасает ли это вас от случайного unleashing хаоса? Определенно.

Раунд 2: Производительность

Теперь, я не фанат скорости, но когда дело доходит до сред выполнения, производительность имеет значение. Вы хотите, чтобы ваше приложение реагировало быстрее, чем ваши друзья, когда вы спрашиваете: “Кто за пиццей?”

И Node.js, и Deno используют движок V8, поэтому они быстрые. Но Deno написан на Rust, что дает ему небольшое преимущество в плане производительности и надежности. Функции безопасности памяти и модель параллелизма Rust делают его монстром под капотом. Тем не менее, Node.js существует дольше, и его оптимизации производительности проверены в бою.

Я провел некоторые тесты производительности, потому что, ну, я – компьютерный фрик:

Базовый HTTP-сервер в Node.js:

JavaScript

 

Базовый HTTP-сервер в Deno:

JavaScript

 

Результаты? Deno немного быстрее обрабатывал запросы, но речь идет о миллисекундах. Для большинства реальных приложений разница не будет переломной — если только вы не пытаетесь создать следующий Twitter (или Х? Так это сейчас называется?).

Раунд 3: Опыт разработчика

Хорошо, этот момент меня ударил по самое сердце. Если вы использовали Node.js, вы знаете, что npm – кровь вашего проекта. Это то, как вы устанавливаете пакеты, управляете зависимостями и иногда кричите на свой экран, когда node_modules вырастает до 2 ГБ.

Deno сказал: «Нет, у нас здесь нет npm». Вместо этого он использует децентрализованную систему модулей. Вы импортируете модули напрямую через URL, вот так:

JavaScript

 

Сначала я подумал: “Подождите, что?” Но потом я понял, насколько это круто. Нет больше раздутых папок node_modules! Нет больше беспокойства о несовместимости версий пакетов! Просто чистые, прямые импорты. Тем не менее, я признаюсь: мне не хватало удобства npm и огромного разнообразия пакетов, которое он предлагает. Старые привычки уходят не так легко.

Быстрое сравнение

Вот краткое сравнение, чтобы показать различия синтаксиса и стиля между Deno и Node.js:

Чтение файла

Node.js:

JavaScript

 

Deno:

JavaScript

 

Отправка HTTP-запроса

Node.js (Используя axios):

JavaScript

 

Deno (Встроенный Fetch):

JavaScript

 

Итак, что же выбрать?

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

Для меня? Я, вероятно, продолжу экспериментировать с обоими. Node.js для меня как дом, но у Deno есть этот блестящий, притягательный вид новой игрушки. Более того, меня привлекает идея написания кода, который обеспечивает большую защищенность в будущем.

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

Ваш черед!

Вы уже пробовали Deno, или остаетесь верным Node.js? Поделитесь своими мыслями ниже — я всегда готов к хорошему техническому дебату (дополнительные баллы, если включите мемы).

Source:
https://dzone.com/articles/deno-vs-nodejs-the-showdown-nobody-asked-for