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

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

Compartilhe

Introdução

Na atualidade, a criação de aplicações tem como foco arquiteturas que sejam escaláveis e na entrega de soluções em tempo real, além da atenção à componentização e segurança.

Além disso, soma-se a esse cenário a revolução iniciada pelos smartphones, com o uso cada vez mais intenso das mídias sociais e o aumento de soluções de IoT (Internet das Coisas). Nesse contexto, os paradigmas conhecidos no desenvolvimento de aplicações também têm passado por diversas mudanças que vão do Front-end ao Back-end, onde pensamos cada vez mais em uma solução como um todo, levando em consideração o consumo de dados e a disponibilidade de infraestrutura.

E é nessa conjuntura que nasce o Node.js, surgindo como uma solução poderosa e barata para a criação e a manutenção de ambientes de tecnologia com altas demandas. Então, vamos conhecer um pouco sobre essa ferramenta?

Banner da promoção da black friday, com os dizeres: A Black Friday Alura está chegando. Faça parte da Lista VIP, receba o maior desconto do ano em primeira mão e garanta bônus exclusivos. Quero ser VIP

O que é Node.JS?

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

O JavaScript figura hoje como uma das linguagens mais utilizadas, e em grande parte isso se deve ao fato de ser uma linguagem base para dezenas de frameworks com alta popularidade e adesão na comunidade de desenvolvimento.

Por se tratar de uma linguagem popularmente conhecida para a construção de aplicações web mais interativas, o JavaScript possui grande foco no Front-end (client side), ou seja, é comumente utilizada para rodar no “lado cliente” da aplicação. Com a evolução das tecnologias web, tornou-se possível fazer o JavaScript rodar também no Back-end, e é nesse momento de consolidação de tecnologias e soluções que surge o Node.js.

Mas, afinal, o que é o Node.js? O Node.js é um ambiente de execução do código JavaScript do lado servidor (server side), que na prática se reflete na possibilidade de criar aplicações standalone (autossuficientes) em uma máquina servidora, sem a necessidade do navegador.

O que é Node.js? | #AluraMais

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 com o histórico de criação, atualizações e novidades implementadas no Node.js.

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

Ouvir um pouco de:
Node.js – Hipsters #199

Como instalar o Node.JS: Linux, Windows 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).

Temos um excelente conteúdo mostrando em detalhes a instalação do Node.js em diferentes plataformas, que é o artigo Como instalar o Node.js no Windows, Linux e macOS.

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

JavaScript Runtime e V8

Ilustração de um motor de carro em fundo branco e peças coloridas.

O Node.js é a ferramenta que vai nos entregar a capacidade de interpretar código JavaScript, de maneira bem similar ao navegador. Quando executamos um comando escrito 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 esse motivo, o Node.js também pode ser referido como um 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”.

Quando iniciamos o Node.js com o comando node, iniciamos um processo que engloba um interpretador JavaScript e um utilitário CLI (command-line interface), e é neste processo aberto no terminal que irá acontecer a interpretação e execução do JavaScript runtime. Para esse processo de interpretação, o Node.js faz uso do V8, mais precisamente 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 WebKit, 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 os bytecodes a serem executados pela máquina. 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:

Esquema ilustrando o conjunto de etapas do V8 para rodar um código em JavaScript. Nele é indicado como primeira etapa “Código JavaScript”; em seguida “Análise e conversão”; na sequência o esquema aponta para “Árvore Sintática Abstrata”; depois o fluxo segue para "Interpretador da V8” que oferece duas opções para continuar o fluxo: uma segue diretamente para a etapa “Bytecode”, a outra para “Compilador TurboFan” que desencadeia a etapa “Código de máquina otimizado” e só então finaliza o fluxo em “Bytecode”.

Com execução dessa sequência de processos apresentada no esquema acima, o nosso motor Javascript interpreta e compila o código para um bytecode otimizado para executar no computador.

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 outras plataformas consagradas de programação, como o Java, PHP e .NET, pelo fato de ser single thread, ou seja, o Node.js não inicia threads em paralelo como outras plataformas. Por se tratar de um sistema single thread, o Node.js não tem a necessidade do gerenciamento de múltiplas threads, otimizando, assim, o processo e o consumo de memória da aplicação.

A característica do Node.js que faz com ele não seja lento ou demore a processar a fila de requisição é ser não bloqueante; isso tem a ver com o sistema de callbacks do JavaScript e o loop de eventos. Para saber mais sobre esses recursos, confira o artigo Arquitetura do Node.js: entenda o loop de eventos.

Características do Node.JS

No decorrer do artigo já falamos de algumas características do Node.js, mas vale ressaltar que ele pode ser usado para:

  1. Desenvolver soluções em API Rest;
  2. Criação de chatbots;
  3. Projetos de internet das coisas (IoT); e
  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 pensando desde o ínicio para entregar soluções para arquiteturas escaláveis, por isso 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.

Para se trabalhar com o Node.js é preciso conhecer as bases do JavaScript, que é uma linguagem com grande receptividade, principalmente para os iniciantes, pois possui uma curva de aprendizagem mais suave em comparação a outras linguagens.

Módulos

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.

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.

Usando o NPM

A imagem mostra o logo do gerenciador de pacotes do Node.js o NPM.

No processo de instalação do Node.js nos é entregue também o NPM (Node Package Manager), que 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.

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, e possibilita também a criarmos nossos próprios módulos e compartilhar com a comunidade. Quer saber como? Dá uma conferida neste super artigo.

Certificações

As certificações são sempre um ponto de muita discussão dentro das comunidades de tecnologia, mas é consenso que elas ajudam profissionais a adquirirem conhecimentos em diferentes áreas.

Além disso, certificações também são uma ótima oportunidade de conseguir mostrar para o mercado que você conhece os por menores de algumas tecnologias ou linguagens. Empresas como Microsoft, IBM, Google, Oracle e alguns institutos ou fundações promovem certificações a profissionais de tecnologia.

Mas existem certificações em Node.js? E a resposta é, sim! Através da OpenJS Foundation é possível conseguir certificações em Node.js, a fundação oferece duas opções de certificações para desenvolvedores. São elas:

  1. OpenJS Node.js Services Developer (JSNSD);
  2. OpenJS Node.js Application Developer (JSNAD).

1) OpenJS Node.js Services Developer (JSNSD)

Certifica a pessoa como competente na criação de API Rest e Serviços com atenção especial à implementação de segurança.

A imagem mostra a logo da certificação OPENJS NODE.JS Services Developer.

2) OpenJS Node.js Application Developer (JSNAD)

Esta certificação é para pessoas desenvolvedoras com capacidade de criar aplicativos web com Node.js.

A imagem mostra a logo da certificação OPENJS NODE.JS Application Developer.

Resumo sobre as Certificações

Em resumo, a certificação é uma sinalização para o mercado e comunidade de tecnologia que você, enquanto profissional, treinou habilidades e tem conhecimento em determinada tecnologia, e podem dar um up bem legal no currículo.

Para ficar mais por dentro do assunto e entender a relevância de certificações no mercado de trabalho, você pode conferir esse episódio do #HipstersPontoTube:

Vale a pena fazer uma certificação? #HipstersPontoTube

Sua utilização no mercado

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, podemos citar:

  • GoDaddy: que migrou e implementou diversos projetos de frontend e backend em Node.js, inclusive abandonando tecnologias .NET em prol do Node.js;

  • Netflix: este é um caso bem emblemático por se tratar da maior plataforma de streaming da atualidade. Substituiu o Java pelo JavaScript para melhorar a performance de suas requisições;

  • NASA: A engenharia da NASA desenvolveu uma API com Node.js para trabalhar a integração de bases de dados em um serviço de cloud;

  • Slack: conhecida plataforma de comunicação pessoal ou profissional, roda suas aplicações e desenvolveu seu cliente de desktop com Node.js;

  • Uber: a aplicação que conecta usuários e condutores foi construída com base no Node.js.

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

No contexto deste universo que é o Node.JS, o projeto mantém um repositório com diversos exemplos de implementações usando a tecnologia, portanto se você quer validar algum conceito, ou mesmo uma ajuda na implementação de um servidor usando o Node.js essa documentação é para você, acesse o repositório de exemplos.

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

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

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 e programação

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

Aprenda mais sobre Node.JS gratuitamente

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

Apostilas — Você profissional em T

Com as Apostilas de tecnologia sobre Programação, Front-End, Data Science e UX & Design da Alura avance nos estudos e no desenvolvimento da sua carreira em T.

Você poderá se aprofundar nos seguintes tópicos:

  • Desenvolvimento Web com HTML, CSS e JavaScript;
  • SQL e modelagem com banco de dados;
  • Python e Orientação a Objetos;
  • Java para Desenvolvimento Web;
  • Java e Orientação a Objetos;
  • C# e Orientação a Objetos;
  • UX e Usabilidade aplicados em Mobile e Web;

Baixe elas completas em: Apostilas da Alura - Conteúdo livre para o seu aprendizado

Conclusão

O JavaScript é uma linguagem muito popular e nos últimos anos vimos nascer vários frameworks que a utilizam. Com o Node.js é possível usar todo o poder do JavaScript também no backend, além de chatbots, IoT, desenvolvimento de aplicações desktop e até mesmo IA.

Para as pessoas desenvolvedoras, independente da linguagem, hoje, já é um diferencial ter conhecimentos em Node.js. Quer dar um mergulho ainda mais profundo? Deixamos aqui algumas referências que serão de grande ajuda:

André Bessa
André Bessa

Eu sou programador e instrutor de programação usando C# e .NET. Formado em Sistemas de Informação. já programei usando Java, PHP,C#, PostgreSQL e MySQL, além de já ter atuado com suporte também. Buscando sempre aprender mais sobre tecnologias.Hobbies são gibis e séries.

Veja outros artigos sobre Programação