Node.JS: o que é, como funciona esse ambiente de execução JavaScript e um Guia para iniciar

andre-bessa1
andre-bessa1

Compartilhe

Cada vez mais, pessoas desenvolvedoras procuram soluções para criar aplicações escaláveis, rápidas e seguras, tanto no front-end quanto no back-end. É nesse contexto que surge o Node.js.

A popularização dos smartphones, o uso intensivo das mídias sociais e o crescimento das soluções de IoT (Internet das Coisas) transformaram o desenvolvimento de aplicações. Como os paradigmas no desenvolvimento mudaram, pensamos cada vez mais em soluções integradas, considerando o consumo de dados e a disponibilidade de infraestrutura.

O Node.js nasce como uma solução poderosa e barata para a criação e a manutenção de ambientes de tecnologia com altas demandas.

Neste artigo, você vai descobrir o que é o Node.js, como ele possibilitou rodar JavaScript no servidor, suas principais características e encontrará um guia para começar a utilizá-lo em seus projetos.

O que é Node.js e para que serve? 

Logo oficial do Node.js, em cor preta e detalhes verdes.

O JavaScript é uma das linguagens de programação mais utilizadas, principalmente por ser a base de diversos frameworks populares e contar com forte adesão da comunidade de desenvolvimento.

Tradicionalmente, o JavaScript era usado para criar aplicações web interativas, rodando principalmente no Front-end (lado do cliente). Com o avanço das tecnologias web, tornou-se possível executar JavaScript no Back-end, e foi nesse contexto que surgiu o Node.js.

Mas, afinal, o que é o Node.js? O Node.js é um ambiente de execução (runtime) para JavaScript do lado servidor (server side). Com ele, é possível criar aplicações completas, rodando diretamente no servidor, sem depender de um navegador. Em resumo, Node.js permite usar JavaScript para criar servidores web, APIs, aplicações em tempo real e muito mais.

O que é Node.js?

Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

A História do Node.JS

O Node.js nasceu em 2009 como uma resposta às tentativas de rodar códigos JavaScript em modo server side, uma vez que a linguagem tinha como meta principal a manipulação do DOM (Document Object Model) e deixar as aplicações web mais interativas e dinâmicas.

Soma-se a isso o fato de que pessoas desenvolvedoras de JavaScript trabalham com uma linguagem simples, interpretada e que não necessita da instalação de ferramentas complexas de desenvolvimento.

Esses são alguns dos fatores motivadores do criador do projeto do Node.js, o engenheiro de software Ryan Dahl, responsável por esse ambiente de execução do código JavaScript fora do navegador, no lado servidor.

Linha do tempo

Abaixo, temos uma linha do tempo do Node.js, passando pelo seu nascimento até a atualidade:

Linha do tempo da história do Node.js de 2009 a 2022, mostrando marcos importantes como o nascimento em 2009, Express em 2010, npm, Socket.io, versões LTS, Node.js Foundation em 2015, HTTP/2 em 2017, e Node.js 18 em 2022.

Você pode conferir a versão acessível da linha do tempo no GitHub.

Depois desse mergulho na história do Node.js, recomendamos o episódio #199 do Hipsters Ponto Tech, “Node.js”, que discute o impacto do software no ecossistema JavaScript:

Node.js – Hipsters Ponto Tech #199

spotify:7bI6ivXl6PkjVUmhvurKRb:episode

Como instalar e começar a usar o Node.js no Windows, Linux e MacOS

O Node.js é uma ferramenta de código aberto e gratuita. Um belo atrativo, não?! Ela também é multiplataforma, o que nos permite entregar uma solução para rodar em ambientes Windows, Linux ou MacOS, e seu interpretador é baseado no V8 da Google (vamos conferir mais detalhes sobre ele a seguir).

Você também pode acessar o artigo completo “Como instalar o Node.js no Windows, Linux e macOS” para um passo a passo detalhado, perfeito para quem deseja aprender como usar Node.js em diferentes sistemas operacionais.

Recomendamos a leitura deste material para que você entenda como instalar e explorar as diferentes versões do Node.js.

Como funciona o Node.js ou JavaScript Runtime e V8

Ilustração de um motor de carro representando metaforicamente o motor V8 JavaScript do Google Chrome usado pelo Node.js.

O Node.js permite interpretar código JavaScript fora do navegador, funcionando de maneira similar ao ambiente de execução presente nos browsers. Quando executamos um comando em JavaScript, o Node.js interpreta esse comando e faz a sua conversão para a linguagem de máquina a ser executada pelo computador. Por isso, o Node.js também pode ser chamado de JavaScript Runtime, ou um programa de execução do JavaScript.

• Observe a sequência de comandos JavaScript no terminal exibido abaixo:

Terminal do Windows PowerShell, em fundo preto, exibindo uma sequência de comandos: `const nome = “André Silva”`; `const idade = 22`; `console.log(nome)` e `console.log(idade)`. Como respostas às variáveis inseridas e aos comandos `console.log`, encontram-se os dados “André Silva” e “22”.

Terminal do Windows PowerShell, em fundo preto, exibindo uma sequência de comandos: const nome = “André Silva”; const idade = 22; console.log(nome) e console.log(idade). Como respostas às variáveis inseridas e aos comandos console.log, encontram-se os dados “André Silva” e “22”.

Ao iniciar o Node.js pelo comando node, um processo se abre no terminal contendo um interpretador JavaScript e uma interface de linha de comando (CLI – command-line interface). É nesse ambiente que o código JavaScript será interpretado e executado. Para esse processo de interpretação, o Node.js faz uso do V8, conhecido como Chrome’s V8 JavaScript engine.

O V8 é um poderosíssimo interpretador JavaScript desenvolvido pela Google e utilizado pelo Chrome. Ele também é conhecido como a máquina virtual do JavaScript. Foi desenvolvido usando a linguagem C++, é de código aberto e nasceu com a intenção de acelerar a execução de aplicações desenvolvidas em JavaScript.

Por fornecer uma boa performance, várias plataformas têm adotado o Node.js como um solução viável e eficaz de tecnologia para Back-end, como o próprio Google, Netflix, entre outros.

O motor V8 é um dos principais componentes da arquitetura do Node.JS. Leia mais sobre no artigo Arquitetura do Node.js: conheça seus componentes.

Entendendo o motor

É interessante apontar que existem outros 'motores' para JavaScript, como o SpiderMonkey, do Firefox, ou o JavaScriptCore (também chamado de Nitro), do Safari, mas o adotado pelo Node.js é o V8. De forma geral, o processo de funcionamento desses motores pode ser resumido nas seguintes etapas:

  1. O motor acessa o código JavaScript, que veio da leitura da tag 'script' de um arquivo HTML ou por meio do download de um arquivo JavaScript;
  2. Executa o Parser, processo de análise e conversão;
  3. Monta a AST (Árvore de Sintaxe Abstrata), um mapeamento que identifica o que cada parte do código está fazendo;
  4. E, por fim, interpreta a AST. Nesta etapa, ao interpretar a AST, o motor V8 gera bytecodes que são executados pelo interpretador Ignition. Funções chamadas com frequência (hot paths) são otimizadas e compiladas para código de máquina nativo pelo compilador TurboFan. Neste processo, ainda existe um estágio de otimização do código gerado.

Imagine a escrita da seguinte função em Javascript:

function soma(num1,num2) {
return num1 + num2;
}

Nesse processo de análise e conversão teremos a seguinte AST:

A imagem mostra uma árvore AST para uma função soma definida em código Javascript.

Se você quer entender mais sobre AST e como o código é transformado: pode usar AST Explorer e colocar seu próprio código para entender como ele é transformado.

Na imagem abaixo, temos uma abstração do processo de execução do código JavaScript pelo motor V8:

Na imagem abaixo, temos uma abstração do processo de execução do código JavaScript pelo motor V8:

Fluxograma do processo de execução do motor V8: começa com 'Código JavaScript', passa por 'Análise e conversão', gera a 'Árvore Sintática Abstrata', que alimenta o 'Interpretador da V8' e o 'Compilador TurboFan', resultando em 'Bytecode' e 'Código de máquina otimizado' respectivamente.

No fluxograma acima, temos dois caminhos. O Ignition é o interpretador do V8, ele percorre a AST e gera bytecodes que são executados imediatamente. Já o TurboFan é o compilador otimizador: ele identifica funções executadas com frequência (hot paths) e as compila para código de máquina nativo, muito mais rápido.

Ao final desse processo, o motor V8 combina interpretação e compilação just-in-time (JIT) para equilibrar tempo de inicialização com performance de execução.

Node.js: características técnicas (assíncrono, single thread e orientado a eventos)

Uma das características do Node.js é ser um ambiente de execução assíncrono. Com isso, ele trabalha de forma a não bloquear a aplicação no momento de sua execução, colocando os processos mais demorados para um segundo plano.

O Node.js se diferencia de plataformas como Java, PHP e .NET pelo fato de executar o JavaScript em uma única thread principal (o event loop), em vez de criar threads por requisição.

Porém, internamente, o Node.js usa um pool de threads (via libuv) para operações de I/O como leitura de arquivos e DNS. A pessoa desenvolvedora não gerencia essas threads diretamente, mas elas existem, o que otimiza o processo sem sacrificar a capacidade de lidar com I/O concorrente.

O Node.js não é lento nem demora para processar requisições porque possui característica não bloqueante, relacionada ao sistema de callbacks do JavaScript e ao event loop (loop de eventos). Para saber mais sobre esses recursos, confira o artigo Arquitetura do Node.js: entenda o loop de eventos.

Node.js: principais características e para que serve

Veja exemplos práticos de aplicações que podemos construir com node.js:

  1. Desenvolver soluções em API Rest;
  2. Criação de chatbots;
  3. Projetos de internet das coisas (IoT);
  4. Dar vida a soluções de web scraping, web servers e até mesmo aplicações desktop.

O Node.js possui uma versatilidade gigantesca e Camila Pessôa, em seu artigo sobre como o Node.js funciona, elenca algumas outras características que não podemos deixar de comentar:

Escalabilidade: o Node.js foi pensado desde o início para entregar soluções para arquiteturas escaláveis, o que explica sua adoção por grandes empresas de tecnologias;

Multiplataforma: podemos criar desde soluções web a aplicações desktop;

Open Source: como já citado, o Node.js tem seu código aberto, o que nos possibilita contribuir com o projeto e até mesmo realizar customizações;

Multi-paradigma: com o JavaScript podemos adotar várias formas de codificar usando paradigmas como a orientação a objetos, o funcional e o orientado a eventos.

Por isso, Node.js é considerado uma das opções mais populares para quem deseja uma primeira experiência no backend – especialmente para quem já vem do mundo JavaScript no frontend. Se você quer aprender como usar o Node.js do zero, confira a Carreira de Desenvolvimento Back-end Node.js.

Node.js e módulos: como organizar e reaproveitar código

O Node.js trabalha fortemente com o conceito de módulo, que visa organizar o código em partes pequenas e especializadas, além de aplicar o princípio de encapsulamento ao “esconder” o código e expor somente o necessário a outras partes da aplicação.

Originalmente o Node.js trabalhava com o sistema CJS (Common JS) de modularização, pois o JavaScript não tinha ferramentas específicas para isso. Posteriormente foi especificado o padrão “geral” de módulos do JavaScript, o EcmaScript Modules.

Entender a diferença entre CommonJS e EcmaScript Modules é importante para quem quer começar a criar projetos profissionais com Node.js.

O Node.js vem adotando gradativamente o ECMAScript Modules desde a versão 13, o que traz muitas diferenças com relação à forma “original” do Node.js, o CJS. Para saber mais sobre esse tema, recomendamos a leitura do artigo ''Um guia para importação e exportação de módulos com JavaScript.''

Como usar o NPM no Node.js para gerenciar dependências

Logo oficial do NPM (Node Package Manager), em vermelho com as letras 'npm' em fonte estilizada.

O uso do NPM (Node Package Manager) é um dos maiores motivos para o sucesso do Node.js. Se você procura o que é Node.js na prática, saiba que grande parte do ecossistema é construído por meio desses pacotes compartilhados.

O NPM vai nos permitir compartilhar os módulos que criamos com a comunidade além de possibilitar a reutilização de módulos criados por outras pessoas desenvolvedoras.

• Para verificar a instalação e versão do NPM você pode executar o comando npm -v:

A imagem mostra  a tela do terminal do windows onde é executado o comando npm -v e exibe no terminal a versão 8.19.2 do NPM.

A imagem mostra a tela do terminal do windows onde é executado o comando npm -v e exibe no terminal a versão 8.19.2 do NPM.

Através do NPM podemos gerenciar todas dependências dos projetos JavaScript que estamos desenvolvendo, com ele temos acesso a uma gama enorme de bibliotecas e frameworks JS..

Node.js no mercado: quem usa e quais as oportunidades

Fica a pergunta: “E no mercado onde existe o Node.js rodando?”. Por se tratar de uma tecnologia flexível e escalável, hoje grandes empresas utilizam o Node.js como parte de sua stack. Entre elas, destacam-se:

GoDaddy: em 2015, adquiriu a startup Nodejitsu e acelerou a migração da sua infraestrutura de hosting tradicional para Node.js. Com isso, passou a servir centenas de milhares de sites de pequenos negócios usando Node, com melhoria de performance de 4x e redução de custos de infraestrutura de 10x. A empresa utiliza Node.js em diversas partes da sua stack, desde APIs para desenvolvedores até ferramentas de criação de sites.

Fonte: GoDaddy Joins Newly Unified Node.js Foundation — Press Release oficial

Netflix: caso emblemático por se tratar de uma das maiores plataformas de streaming do mundo. A Netflix historicamente era uma empresa Java, mas ao migrar para a nuvem adotou uma arquitetura baseada em serviços. A camada de UI, que antes rodava em um servidor Java monolítico, foi migrada para Node.js rodando em containers Docker, o que reduziu o tempo de startup de mais de 40 minutos para menos de 1 minuto. A motivação principal foi unificar a linguagem entre cliente e servidor. Java ainda alimenta o backend core da Netflix, tudo que a pessoa usuária vê vem do Node.

Fontes:

NASA: utilizou Node.js para criar um sistema que centraliza e migra dados sobre trajes espaciais (EVA spacesuits) de três bancos de dados legados (Oracle e Microsoft SQL Server) para um banco de dados na nuvem (RethinkDB na AWS). A arquitetura usa microserviços e APIs em Node.js que transferem dados via jobs ETL noturnos, reduzindo o tempo de acesso aos dados em 300%. O objetivo é melhorar a segurança das pessoas astronautas centralizando informações críticas sobre o ciclo de vida dos trajes.

Fontes:

Slack: desenvolveu seu cliente de desktop usando Electron, que combina o motor de renderização do Chromium com o runtime e sistema de módulos do Node.js. O app desktop foi um dos primeiros aplicativos Electron em produção fora do Atom, e evoluiu de CoffeeScript com APIs DOM vanilla para uma aplicação moderna em TypeScript + React. O backend do Slack, por outro lado, é primariamente PHP/Hacklang rodando em HHVM, com serviços de mensageria em tempo real escritos em Java e Go.

Fontes:

Uber: adotou Node.js em 2011 como uma das primeiras linguagens da empresa, inicialmente para o serviço de dispatch (despacho de corridas) por conta de suas primitivas assíncronas e processamento single-threaded. Node.js também se tornou o core da stack web, com o framework Express.js (via Bedrock, o web server interno da Uber). Porém, a partir de 2018, a empresa migrou progressivamente os serviços backend de Node.js e Python para Go e Java, buscando type safety e melhor performance. Em 2020, o principal serviço de dispatch já rodava em Go.

Fontes:

Podemos citar diversas startups e até gigantes da tecnologia como IBM que possuem soluções desenvolvidas com o Node.JS. É uma tecnologia em grande expansão, que tem aberto inúmeras oportunidades de trabalho no Brasil e exterior.

Suporte Node.js: repositório para validações e ajuda em projetos

Para dúvidas frequentes sobre como usar Node.js ou sobre projetos práticos, o repositório oficial de exemplos é um excelente recurso.

Saiba mais: Dev em T — programação, carreira e tipos de perfil

Dev em T: programação, carreira e tipos de perfil | #HipstersPontoTube

https://www.youtube.com/watch?v=_nCESq0ggRg

Guia de Carreira Node.JS (Tech Guide)

Caso você queira mergulhar nessa tecnologia mas não saiba por onde começar a estudar, não deixe de acessar o Tech Guide Node.JS, lá você vai conhecer trilhas de estudos do iniciante ao avançado, trazendo tecnologias e conceitos que vão te ajudar a ser um profissional em T.

Confira também o episódio da série Guia de Carreiras do #HipstersPontoTube sobre o Node.JS e aprenda mais sobre essa tecnologia, suas vantagens e o que é necessário para iniciar sua profissão nesta área de desenvolvimento de software:

Guia de Carreira NODE.JS | #HipstersPontoTube

Os MELHORES livros de tecnologia para ler em Programação com Roberta Arcoverde | #HipstersPontoTube

Aprenda Node.js gratuitamente: cursos e conteúdos recomendados

Acesse gratuitamente as primeiras aulas dos cursos feitos pela Escola de Programação da Alura e continue aprendendo sobre temas como:

  1. JavaScript: tipos, variáveis e funções
  2. JavaScript: Arrays
  3. JavaScript: objetos
  4. JavaScript I: algoritmos de ordenação
  5. Algoritmos com JavaScript II: aprofundando em algoritmos de ordenação e busca
  6. Node.js: criando sua primeira biblioteca
  7. JavaScript: programação orientada a objetos
  8. Node.js: API Rest com Express e MongoDB

Como aprender melhor? Com Diogo Pires | #HipstersPontoTube

https://www.youtube.com/watch?v=uOagLB3uyeU

Resumo: por que aprender Node.js e próximos passos

O JavaScript é uma das linguagens de programação mais populares do mundo. O Node.js tornou possível usar JavaScript também no backend, criando APIs, web servers, soluções de Internet das Coisas (IoT), aplicações desktop, chatbots e até inteligência artificial. Se você busca aprender o que é Node.js, como funciona e para que serve, esse é o momento ideal para começar.

E claro, se você quiser dar um passo a mais na carreira de backend, aproveite para conhecer a Carreira de Desenvolvimento Node.js da Alura, um caminho estruturado, do básico ao avançado, para dominar todo o ecossistema JavaScript no servidor.

Deixamos aqui também algumas referências que serão de grande ajuda para mergulhar no universo do Node.js:

• Artigo Node.JS: definição, características, vantagens e usos possíveis;

• Artigo Como instalar o Node.js no Windows, Linux e macOS;

• Podcast | HipstersPontoTube Ecossistema Node.js;

• Podcast | HipstersPontoTube JavaScript para back-end;

• Artigo Debugando projetos NodeJS no VSCode;

• Site Node.org.

Veja outros artigos sobre Programação