Новая библиотека JavaScript, о которой все говорят, от создателя Node

Стоит ли изучать Deno? В чем главное преимущество использования Deno перед Node?

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

У Node тот же создатель, что и у Deno, Райан Даль. Тогда возникает правильный вопрос: Зачем он создал еще одну библиотеку, если Node уже обосновался на рынке и пользуется популярностью у многих компаний?

Поддержка за сценой

Официальные документы говорят:

«Deno - это простая, современная и безопасная среда выполнения для JavaScript и TypeScript, которая использует движок V8 и построена на Rust».

Это также основная причина, по которой Deno может быть очень успешным. За этим стоят крупные компании:

  • Rust создан Mozilla
  • TypeScript от Microsoft
  • Двигатель V8 от Google

С другой стороны, Node построен на C и C ++, которые, как правило, менее безопасны по сравнению с Rust. В нем нет встроенного компилятора TypeScript, поэтому для его использования вам необходимо установить его с помощью npm.

Что у них общего, так это двигатель V8 от Google под капотом - тот же, что управляет браузером Chrome.

Модули ES против CommonJS

В 2009 году, когда был создан Node, у JavaScript не было собственной модульной системы. Следовательно, по умолчанию в Node используется синтаксис CommonJS:

const bcrypt = require('bcrypt');

Проблема в том, что на самом деле это не JavaScript . Это нестандартный способ включения различных фрагментов кода из сторонних библиотек.

К счастью, в 2015 году ES6 представила собственную модульную систему для JavaScript, так что теперь вы можете сделать это:

import bcrypt from 'bcrypt'

По сравнению с Deno, модули ES используются в Deno из коробки. Это означает, что вы можете импортировать URL-адреса без установки через npm:

import 'https://deno.land/std/examples/chat/server.ts'

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

Причина в том, что Deno также заботится о безопасности.

Безопасность прежде всего

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

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

И Node будет доверять этому модулю без нареканий.

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

Встроенные инструменты

Чтобы начать разработку приложения с помощью Node, вы должны решить, какие инструменты будут использоваться в первую очередь.

Собираетесь ли вы использовать TypeScript? Затем установите ts-node. А как насчет тестирования? Воспользуемся Jest. А как насчет форматирования? Объединение? и т.п.

С Deno вам не нужно решать эти проблемы, потому что он поставляется с предустановленными инструментами. А поскольку он стандартизирован для Deno, вы можете быть уверены, что эти инструменты имеют полную поддержку. Очень круто.

API, совместимый с браузером

Я считаю это одним из самых больших различий между Node и Deno.

Как вы уже знаете, браузеры имеют window как глобальный объект, который имеет множество свойств и методов, таких как addEventListener, setTimeout, setInterval и т. Д.

Браузеры также используют fetch для отправки запроса по данному URL-адресу и возврата обещания.

В Deno все это встроено. Это идеально, особенно для разработчиков интерфейса, которые используют эти методы ежедневно.

А что насчет Node?

В Node fetch не существует. Если вы хотите его использовать, вам нужно установить что-то вроде node-fetch ​​или node-fetch-npm. Но какой из них правильный? Будет ли это работать в моем проекте?

Узел также использует global в качестве основного объекта, который не является частью браузера. Так что это не совсем JavaScript.

Один исполняемый файл

При использовании Deno у вас всегда есть один исполняемый файл, например deno.exe, который можно дважды щелкнуть и запустить Deno runtime. Таким образом, вы можете писать программы, используя JavaScript, а затем с легкостью делиться ими с другими компьютерами.

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

Асинхронные возвраты обещаний

Асинхронный код в Deno всегда возвращает Promise. В Node это не всегда так.

Node был создан до того, как у нас появился синтаксис на основе Promise. Хотя во многих случаях асинхронный код возвращает обещание, иногда приходится искать обходные пути с конструкторами, такими как util.promisify.

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

Его серверная часть написана на Rust, который обрабатывает асинхронный код с так называемым фьючерсами. Под капотом он переводит асинхронный код в промисы.

Это означает, что в Deno вы можете использовать async await без каких-либо проблем.

Подвести итог

Итак, мне следует немедленно начать использовать Deno?

Я бы сказал: «Не совсем».

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

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

И пока самый большой недостаток Deno в том, что он находится только на ранней стадии. Сообщество только начинает расти. Так что только время покажет нам, догонит ли он такие языки, как Node, Java или PHP, или это просто начальная шумиха.

Если вам понравилось читать, возможно, вас заинтересуют другие мои рассказы:





Спасибо за прочтение!