article.title

Топ 5 отличий Deno от Node.js

Создатель Node.js Ryan Dahl, представил новую среду выполнения кода, смысл появления которой правлен на то чтобы исправить недостатки Node.js.


Итак, какими же могут быть его наиболее очевидные преимущества Deno над старшим братом ?


Использование ES Modules без дополнительных телодвижений


const express = require(“express”); // Node.js


import express from “express”; // Deno


Если вы фронт-разработчик, то вы наверное давно забыли о первом способе добавления модулей, однако на стороне сервера в окружении Node.js без транспайлеров, этот метод до сих пор используется.


Подключение же модулей через import, при этом имеет большую производительность и более удобно по следующим причинам: 

  • При подключении, вы можете выборочно загрузить только те части модуля которые вам нужны, это позволит сэкономить время и память. Да и это придаёт однородности коду на сервере и клиенте, вам самим легче. (А иначе зачем вам вообще JS на сервере? =) )
  • import позволяет загружать модули асинхронно, что повышает скорость приложения.


Децентрализованные пакеты


С Deno, вам больше не придётся зависеть от npm , больше нет строгой необходимости в использовании package.json. Каждый пакет может быть загружен со внешнего ресурса.

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


npm i moment


а потом уже подключить его внутри кода приложения:


const moment = require(“moment”);


К тому же, каждый раз когда мы хотели бы запустить наш проект на Node локально, нужно было устанавливать все зависимости через npm.


В Deno модули загружаются напрямую через ссылки, например для moment это можно делать так:


import { moment } from “https://deno.land/x/moment/moment.ts”


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


Использование await на любом уровне, без async


// Node.js
const fakeData = async() => {
    const data = await fetch(“https://some_json_file”);
    const result = await data.json();
}


// Deno
const data = await fetch(“https://some_json_file”);
const result = await data.json();


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


Нативная поддержка Typescript из коробки.


Просто пишите и не заботитесь о конфигурации и установке.


Доступ к API схожей с браузерной 


Например для того чтобы создать запрос http на стороне клиента, мы можем воспользоваться методом стандартный веб API - fetch, однако на стороне сервера в Node.js он не доступен, поэтому мы вынуждены сначала установить пакет:


npm i fetch


И после этого добавить пакет в приложение 


const fetch = require(“node-fetch”);


И только после этого мы можем использовать функционал fetch


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


Учитывая пункт 3 в этом списке, код может быть кардинально упрощён, по сравнению с кодом в Node.js


// Node.js
const fetch = require(“node-fetch”);
const fakeData = async() => {
    const data = await fetch(“https://some_json_file”);
    const result = await data.json();
}


становится


// Deno
const data = await fetch(“https://some_json_file”);
const result = await data.json();


Это конечно же не всё


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


В итоге, благодаря упомянутым (и нет) фишкам Deno, он позволяют разрабатывать серверный код соответствующий современным реалиям. Заменит ли он Node.js ? Время покажет, всё зависит от того как сама экосистема Node будет эволюционировать и отвечать запросам разработчиков. А чтобы узнать лучше среду Deno могу посоветовать лишь обратиться на их официальный сайт - https://deno.land/