Deno. Uma ameaça ao Node.js?

Uma tecnologia pode revolucionar o desenvolvimento back-end

Simão Bentes
labmm4a
7 min readAug 4, 2021

--

Nunca foi tão importante para um full-stack developer o conhecimento de Node.js. Este runtime revolucionou o desenvolvimento server-side, ao libertar a linguagem Javascript do browser e transportá-la para o servidor. Antes disso, era impossível escrever Javascript fora do browser. Percebemos então que Node.js não é uma linguagem de programação, mas sim uma ferramenta que nos permite, para além de outras funcionalidades, escrever Javascript do lado do servidor. Este corre no motor de Javascript “V8”, desenvolvida e utilizada pela Google no Chrome.

Logótipo do runtime Deno

Ryan Dahl foi um dos criadores do Node.js, em 2009. Após ter saído do projeto em 2012, decidiu desenvolver o Deno. Este nasceu de um conjunto de percepções do programador em relação às limitações da sua primeira criação e surge como uma possível solução dos problemas existentes no Node. Ao comparar o nome destas duas soluções, torna-se evidente que o criador apenas trocou as duas sílabas, obtendo então a palavra Deno, colocando-o como um adversário direto do Node.js. Poderá o Deno vir a substituir o já estabelecido Node.js?

Node.js. O que é?

Apesar do Javascript ter mais de 25 anos, a sua utilização em server-side é recente. Hoje em dia, é possível fazer muito mais com JavaScript do que apenas tornar sites interativos.

O Node.js não é uma framework de Javascript, mas sim um runtime (interpretador de código) que permitiu trazer o JavaScript para o lado do servidor. Deste modo, a linguagem consegue fugir das limitações de um browser e ter a capacidade de executar a maioria das tarefas que outras linguagens como Python, Java e PHP podem fazer. Este novo paradigma de JavaScript em “ambos os lados” permite também o desenvolvimento de aplicações utilizando apenas uma única linguagem de programação.

O Node.js é executado no interpretador de JavaScript V8. Esta tecnologia é utilizada pela Google para executar o código no Chrome e foi a partir dela que Ryan Dahl criou o projeto.

Vantagens do Node.js

Node.js utiliza Javascript.

O Javascript tem várias décadas de existência e uma comunidade ativa de milhões de programadores. O mesmo não pode ser dito de outras linguagens concorrentes. A rapidez desta linguagem permite aumentar consideravelmente o desempenho das aplicações web. A Netflix é um exemplo claro dos benefícios da mudança para Node, ao ver a performance das suas aplicações aumentar exponencialmente.

Node.js é leve e flexível.

A flexibilidade do Node.js possibilita a sua execução na grande maioria dos servidores e em qualquer sistema operativo. Conta com a ajuda das principais empresas de serviços cloud atualmente como, por exemplo, a AWS (Amazon Web Services), Microsoft Azure e Google Cloud que oferecem suporte nativo ao Node.

Utilizar apenas uma linguagem.

Um grande desconforto de muitos programadores é a necessidade de trabalhar com linguagens diferentes em front-end e back-end. Com Node.js resolve-se este problema, pois permite-nos programar Javascript em ambos os lados.

Uma grande comunidade ativa.

O Node.js conta com uma comunidade ativa de milhões de programadores que contribuem para o seu desenvolvimento, através de plataformas como o GitHub.

Um repositório invejável.

O NPM (Node Package Manager) é o maior repositório de código do mundo. Desta forma, o trabalho de uma equipa de programação fica muito mais facilitado, ao permitir a instalação de, por exemplo, uma API à distância de uma linha de código. Bibliotecas e frameworks mais conhecidas como Bootstrap ou React estão disponíveis neste repositório. Este Package Manager faz com que o Node.js se torne numa plataforma com potencial para ser utilizada em qualquer situação. Muito provavelmente, uma solução difícil de implementar num determinado projeto, já existe e está disponível para instalar via NPM.

Os arrependimentos de Ryan Dahl

Apesar de todos os benefícios que o Node.js providenciou, existem fatores menos positivos relacionados com a tecnologia. A convite da JSConf EU, Ryan Dahl esteve presente nesta conferência onde falou especificamente dos seus maiores arrependimentos com o Node.js. Nesta palestra, detalhou o seu arrependimento em relação a algumas das escolhas que foram feitas durante o desenvolvimento do Node. Referiu ainda que, na altura em que o Node.js começou a ser desenvolvido, o JavaScript era uma linguagem muito diferente e faltavam alguns recursos mais modernos, que acabaram por surgir com o lançamento do ECMAScript 6.

Sem promises

Atualmente, as promises existem no Node.js. O problema é que não existia o suporte no início da criação do Node. Deste modo, podemos perceber que muitas API, criadas para a plataforma, não foram construídas nas melhores condições. Como é quase impossível reformular a base de uma comunidade, a melhor via será mesmo criar uma nova comunidade…

Segurança

O Node.js consegue ter acesso a todos os pedidos do sistema, como a escrita e leitura no computador, rede e outros componentes.

Require sem a extensão “.js”

Esta “simplificação” é, na verdade, desnecessária. Contraria ainda a forma com o Javascript funciona no browser. Quando colocamos o atributo src na tag de script, não podemos omitir o tipo do ficheiro em questão (.js). Desta forma, o carregador dos modules tem de procurar pelos arquivos do projeto e tentar “adivinhar” o que o programador pretende.

index.js

Ryan achou engraçada a ideia de dar este nome ao ficheiro .js, visto ser a nomenclatura já utilizada pelo HTML para a identificar a página inicial de um projeto. Esta decisão, no entanto, trouxe alguns problemas ao nível do carregamento dos módulos.

O nascimento do Deno

Na mesma conferência, Ryan anunciou a criação de uma alternativa. Este novo runtime, pretende contornar os erros cometidos com o Node. Ryan denomina-o como:

“A secure TypeScript runtime on V8.”

Embora o nome seja um anagrama de Node, Deno não é um fork do mesmo, mas sim uma nova implementação baseada nos recursos mais modernos do JavaScript, lançados essencialmente com o ECMAScript 6 e em novas tecnologias como TypeScript.

Como se compara ao Node?

O Deno é mais seguro

Um dos principais focos do Deno é a segurança. Qualquer código no Node.js tem o poder de ler e escrever ficheiros de um computador. Por outro lado, no Deno o código por padrão é executado numa sandbox, isto é, se não dermos permissão, qualquer código potencialmente malicioso não poderá aceder a ficheiros do computador. De notar que se assemelha muito ao modo de funcionamento de JavaScript do lado do cliente, que apenas consegue ter acesso a hardware como, por exemplo, a câmera se o utilizadores der permissão no browser.

TypeScript integrado

O Deno não interpreta apenas JavaScript, também utiliza TypeScript, uma linguagem com base em Javascript criada pela Microsoft. Por outro lado, este suporte é nativo, ou seja, não é necessário instalar ou configurar nada. Podemos ver o foco nesta linguagem até no slogan do Deno.

“A secure runtime for JavaScript and TypeScript.”

Esta decisão foi tomada devido ao crescimento do uso de TypeScript em grandes projetos que precisam gerir lógicas mais complexas. Tudo no Deno indica que foi criado com a utilização de TypeScript em mente.

ES Modules

Quando o Node.js foi criado, o ECMAScript6 ainda não tinha sido lançado e, deste modo, não tinha um sistema próprio de módulos. então utilizava o padrão CommonJS:

No entanto, hoje em dia, assim como nos navegadores, o Deno consegue ter acesso a códigos externos, ou seja, podemos importar o código de um arquivo passando apenas o endereço URL.

A principal vantagem é que usa um protocolo compatível com o navegador, permitindo assim importar módulos diretamente via URL, o que tem um grande impacto na forma como utilizamos estes módulos.

Promises

O JavaScript é famoso pela natureza assíncrona que apresenta. No entanto, como o Node.js foi criado antes do JavaScript possuir Promises e Async/Await, no lançamento do ECMAScript 6.

Como resultado desta evolução, o Deno tem um sistema baseado em Promises. Assim, permite-nos trabalhar mais facilmente com código assíncrono, além de evitar os problemas que o Node.js gerava.

Estará o Deno pronto?

O objetivo do Deno não é substituir o Node, mas sim constituir-se como uma alternativa.

O facto do Node.js ter uma grande comunidade ativa e ser mais estável, torna a mudança mais difícil. O Node.js está em desenvolvimento há mais de uma década, tornando-o padrão para o desenvolvimento JavaScript em server-side. Por outro lado, o Deno, tendo sido lançado há apenas dois anos, continua numa fase de aperfeiçoamento.

Para a grande maioria das aplicações que utilizam Node, o Deno pode ainda não ser o mais adequado. Um dos principais obstáculos é, por exemplo, a conversão dos módulos NPM para poderem ser utilizados ​​pelo Deno. No entanto, penso que, de forma gradual, o Deno irá ser adotado cada vez mais, devido às vantagens que apresenta relativamente ao Node.js e à integração com TypeScript. Teremos de esperar para ver.

Apesar das vantagens que este runtime possa vir a trazer, ainda é cedo para afirmar que este passará, de imediato, a uma implementação em grande escala. Manter o Node.js ainda é a escolha mais segura. De qualquer forma, é um dado adquirido que o desenvolvimento do Deno contribui para a evolução e modernização do Javascript no lado do servidor.

Referências Bibliográficas

Deno 1.0. Ryan Dahl, Bert Belder e Bartek Iwańczuk. Consultado a 22 de junho de 2021.

Javascript ES6. W3Schools. Consultado a 27 de junho de 2021.

CommonJS modules. Node.js Documentation. Consultado a 25 de junho de 2021.

What exactly is Node.js. Priyesh Patel. Consultado a 23 de junho de 2021.

How Netflix and Paypal did product transformation using Node.js?. Nilesh Kadivar. Consultado a 26 de junho de 2021.

--

--