Logo Blog

5 momentos para usar NodeJS nos seus projetos

Cover Image for 5 momentos para usar NodeJS nos seus projetos
Brenda Profiro
Brenda Profiro
- ... views

Somos programadores e, como bons programadores, estamos sempre buscando problemas para serem resolvidos por nós da melhor forma possível. Visto isso, no momento de começar um novo projeto e tomar a decisão de quais tecnologias serão usadas, é importante ter imparcialidade em relação à essas escolhas.

E é exatamente sobre isso que eu irei falar hoje: 5 problemas que poderiam ser resolvidos de forma mais fácil utilizando o Node.js. Queria dizer que esses não são os casos exclusivos do Node.js, você pode resolver outros problemas com o Node.js também, estou apenas linkando 5 momentos em que o Node.js deveria ser priorizado no momento da decisão de quais tecnologias serão utilizadas no seu projeto por conta do seu propósito e facilidade de lidar com seu ecossistema.


Primeiramente, o que é o Node.js?

O criador o Node, Ryan Dahl, um programador PHP estava construindo uma feature de barra de progresso. E enquanto ele fazia isso, ele percebeu que o navegador não sabia o quanto do arquivo foi carregado e, consequentemente, o browser estava fazendo muitas requisições para o back-end e isso estava consumindo muita memória.

Então ao contrário do que muita gente pensa, o Node.js não foi criado porque os amantes do JavaScript queriam levar ele para o back-end, muito além disso: o Node.js foi criado para resolver um problema. E esse problema era a forma como as linguagens lidavam com I/O (Input/Output -> Entradas/Saídas).

E, naquele momento, Ryan Dahl se perguntou: Qual linguagem tem a capacidade de fazer I/O não bloqueante? A resposta era simples: o JavaScript.

I/O não bloqueante é a capacidade de lidar com entradas e saídas de forma assíncrona. Iremos falar mais sobre isso um pouco mais pra frente, mas guarde a informação de que: o back-end consegue receber mais uma entrada por vez e entregar as saídas conforme elas são processadas.

E com isso surge o Node.js, que podemos dizer basicamente que é um ambiente de desenvolvimento JavaScript para o back-end e ele foi implementado baseado no V8 que é Engine do Google Chrome.


5 Momentos em que o Node.js é uma opção a ser priorizada no seu projeto:


1- Quando você é um dev Front-end e precisa fazer o back-end da sua aplicação sozinho

A versatilidade é uma das melhores qualidades de um desenvolvedor e, se você tem a capacidade de desenvolver o front-end e o back-end de uma aplicação, suas oportunidades aumentam consideravelmente. E é o que eu quero levar em consideração nesse tópico, se você acabar se encontrando em uma situação em que você é o responsável pelo desenvolvimento de uma aplicação do começo ao fim sozinho, o Node é uma ótima escolha, pois você poderá desenvolver toda a aplicação com uma única sintaxe, uma única linguagem e um único ecossistema.

Desenvolver toda a sua aplicação numa única linguagem vai tornar o processo mais prático e rápido, pois você não precisará "virar a chave" do seu cérebro para que ele "pense em outra linguagem".


2- Quando a sua aplicação recebe muitas entradas simultâneas:

Lembra que pedi para guardar a informação sobre I/O não bloqueante? Bom, ela será extremamente importante nesse momento.

Uma das melhores qualidades do Node.js é a sua capacidade de lidar com várias entradas simultâneas sem consumir muito espaço de memória. Isso se deve á sua arquitetura que é baseada em eventos e é formada por três partes:

  • - Callback: que é a responsável por empilhar as chamadas de funções.
  • - Callback Queue: que é responsável por empilhar os callbacks.
  • - Eventloop: responsável por monitorar se algum evento assíncrono foi disparado para assim executar sua respectível Callback.



Node



Um exemplo prático de como funciona esse I/O não bloqueante é o seguinte: imagine um garçom em um restaurante. Ele vai até uma mesa para fazer o pedido e, depois disso, leva para a cozinha para que o pedido seja preparado. Enquanto esse pedido é feito, ele vai recolhendo o pedido de outras mesas e os levando para a cozinha. Ao decorrer que os pedidos vão ficando prontos, o garçom os leva para sua respectiva mesa.

Em outras linguagens, que não possuem I/O não bloqueante, o que acontece é que o garçom pega o pedido de uma mesa, leva até a cozinha e fica parado esperando esse pedido ser feito para só então ele levar até a mesa. Um pedido por vez, uma única entrada e saída por vez.


3- Quando você irá utilizar um banco de dados NoSQL:

As bases de dados NoSQL são baseadas em JSON (JavaScript Object Notation), portanto a sua comunicação com o Node.js é muito intuitiva. Com isso você não precisará converter esses modelos de dados, pois os mesmos objetos JavaScript armazenados no seu banco de dados podem ser enviados para o front-end da sua aplicação sem nenhum tratamento ou conversão.

Um pequeno exemplo de um objeto JavaScript



    { 
      name: Brenda, 
      sobrenome: Profiro 
    }


4- Quando você não pode utilizar muitos recursos

Como já explicado anteriormente, o Node.js consegue lidar com muitas entradas, ao contrário de outras linguagens. Isso ocorre por conta do seu conceito de single-thread, ou seja, apenas uma thread irá cuidar de todos os Inputs e Outputs da sua aplicação, ao contrário das outras linguagens que abrem uma nova thread cada vez que elas recebem uma nova requisição, o que consome muito mais armazenamento e capacidade de sua CPU.

Como no exemplo a seguir:



Node



Um exemplo de caso bastante interessantes sobre essa escalabilidade do Node utilizando poucos recursos é o do Paypal. Inicialmente, o Palpay decidiu reformular a tela de resumo da conta (que é uma das mais visitadas do site). Pra testar de forma segura, eles desenvolveram a plataforma em Node.js e em Java. O time que desenvolveu o node.js realizou a tarefa duas vezes mais rápido, com menos pessoas, 33% menos linhas de código e 40% menos arquivos. Em relação à performance da aplicação, a versão com Node.js conseguiu atender o dobro de usuários por segundo do que o Java, com uma média de 35% mais velocidade na entrega das requisições.


5- Quando você vai desenvolver aplicações Web:

O Node.js realmente brilha na criação de aplicativos escaláveis e rápidos. Se você quer isso na sua aplicação Web, aconselho a escolher o Node.js. Além do JavaScript ser a linguagem mais utilizada no front-end, principalmente em aplicações Web, utilizar um novo recurso oferecido pelo Node é algo bem avaliado.

O recurso em questão é o SSR (Server Side Rendering) com o Next.js. O Next.js é um framework que permite o desenvolvimento de interfaces (utilizando a biblioteca React) dentro do lado do back-end.

Mas a questão é: Por que eu escolheria fazer a renderização da minha aplicação no meu back-end?

A resposta é simples: performance. Utilizando o SSR, você garante maior velocidade e fluidez no momento de carregamento da página, oferencendo uma melhor experiência ao usuário final de sua aplicação.

Trazendo mais um exemplo de caso para você, nós temos a página inicial do iFood que é construída utilizando o Next.js. Essa decisão foi tomada levando em conta que a marca queria proporcionar a melhor experiência possível, nessa página, pois ela é a primeira noção que um usuário terá da empresa. Se por algum motivo ela não é performática o suficiente ou acaba travando, o usuário não tem uma boa experiência, consequentemente não terá uma boa opinião sobre a marca, o que é muito ruim por si só.


Bônus: Aplicações em que o Node.js não é uma boa opção:

Nem só de vitórias vive um campeão. Apesar dos exemplos com o Node irem muito além desses citados, eu queria abrir um parêntese para uma situação em que o Node.js não seria a melhor opção.

Se a sua aplicação possuir uma computação intensiva da CPU, então o Node não é a melhor pra você. Isso se deve ao fato de que qualquer aplicação desse tipo bloqueará a capacidade de resposta dele.