DEV Community

Cover image for Finalmente entendendo Node.js
Luma Pontes
Luma Pontes

Posted on

1

Finalmente entendendo Node.js

Com esse artigo você vai entender o que é e como funciona Node.js de forma simples.

Sumário

  • Intro: Front-end e Back-end
  • Javascript: o ‘js’ de Node.js
  • Node.js: o que é, como foi feito e como funciona?
  • Consideração final

Intro: Front-end e Back-end

A arquitetura de uma aplicação web pode ser dividida em basicamente 2 componentes: o Front-end e o Back-end.
O Front-end é a interface do aplicativo, ou seja, toda estrutura que você vê em tela. Essa parte do projeto irá interagir diretamente com o usuário e por isso é tão relevante.

Já o Back-end é toda a inteligência por trás das cortinas. O usuário não o vê, mas é o que faz o aplicativo funcionar.
Esses 2 segmentos conversam o tempo todo.

Exemplo:

Alt Text

  1. O Front-end exibe em tela um formulário de login.
  2. Ao apertarmos o botão o Front-end faz uma requisição ao Back-end.
  3. O Back-end, com os dados inseridos no formulário, verifica no servidor o e-mail e a senha e retorna se houve um erro ou se o usuário foi autenticado.
  4. Com essa informação, o Front-end decide se exibe uma mensagem de erro ou se transfere o usuário para a página principal da aplicação.

Javascript: o ‘js’ de Node.js

Javascript para front-end.

Definida como uma linguagem script para o ambiente web, Javascript é tradicionalmente aplicada no Front-end. Com seu uso, é possível construir sites e aplicações interativas e dinâmicas. Para isso os navegadores têm mecanismos, chamados também de motores, que são capazes de executar javascript.

Javascript para back-end?

Antes da existência de Node.js, javascript não era comumente utilizado para programação do Back-end. Pelo fato da linguagem ser interpretada ao invés de compilada, seu uso não era eficiente para essa finalidade e podia deixar o aplicativo web muito lento.

Node.js

O que é?

Node.js é um ‘runtime enviroment’ de javascript. Em outras palavras: É um mecanismo responsável pela execução do programa de uma forma que torna eficiente o seu uso para Back-end. O seu reconhecimento deve-se à sua rapidez, responsividade e escalabilidade.

Como foi feito?

O Node foi construído com base no motor, desenvolvido e usado pelo Google Chrome, que executa javascript no browser, chamado V8 engine.

O V8 compila javascript em tempo de execução (compilação just-in-time) ao invés de interpretá-la. Isso, junto a uma série de outras características desse motor, acaba deixando a execução mais rápida.

Como funciona?

Ao pesquisar sobre Node.js você pode se deparar com termos como:

  • Orientação a eventos
  • Single-thread
  • Event Loop
  • Assíncrono
  • I/O não bloqueante

Para explicar seu funcionamento e os termos acima, iremos expor a, comumente usada, analogia do restaurante.

Fazendo um paralelo de uma aplicação com um restaurante, os clientes seriam os usuários e seus pedidos seriam as requisições feitas. Sendo a cozinha o equivalente ao Back-end.

O comportamento dos garçons é o que será estudado conforme as características do Node.

Node.js opera com uma única thread (single-thread), designada como event-loop, que age de forma orientada a eventos. Em contrapartida, temos a abordagem thread-based, que funciona com múltiplas threads. No restaurante single-threaded existe somente um garçom e no multi-threaded, vários.

Mas como um restaurante com menos garçons vai realizar pedidos mais rapidamente?

Isso acontece por causa do comportamento de I/O não bloqueante que faz com que a cozinha atue de forma assíncrona dos garçons. Essa prática difere do modelo thread-based, onde cada garçom, ao fazer o pedido, deve esperar o prato ficar pronto para retornar o pedido à mesa e poder atender outro cliente. Considerando esse último modelo, um restaurante com X garçons e 1000X clientes teria um atendimento extremamente lento. Já o modelo com single-thread se mantém rápido e eficiente com muitos clientes, mesmo com só um garçom, ou seja, mesmo exigindo menos hardware. E é por isso que o uso de Node.js torna a aplicação altamente escalável.

Alt Text

Como o restaurnte da analogia funcionaria. Esquerda: com Node; Direita: abordagem thread-based.

Consideração final

Então concluímos que Node.js é a melhor forma de programar um aplicativo web?

Não necessariamente.

Em uma aplicação com um grande volume de requisições, Node pode ser a melhor pedida, mas num aplicativo cujas requisições exigem mais do CPU, como manipulação de imagens e vídeos por exemplo, optar Node.js não seria a melhor saída. Para entender melhor, imagine que no exemplo do restaurante, o tempo necessário para anotar o pedido de cada cliente seja maior que o tempo do prato ser preparado. Desse modo, a abordagem thread-based seria mais rápida.

Fontes:
Dany York, 2011;
StackPath, Robert Gibb, 2019;
Programming with Mosh, 2018..

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay