DEV Community

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

Posted on

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..

Discussion (0)