Node.js — O que é, por que usar e primeiros passos

Node.js (oh really)

Então você vive ouvindo falar de Node.js. Umas das “novas” tecnologias que ninguém consegue parar de falar e que cada vez mais aparece nas notícias e artigos de blogs.

Nós da Touch Health esperamos tirar algumas das suas dúvidas e finalmente mostrar porque dizem que Node.js é leve, rápido e poderoso. Talvez até te inspirar a estudar uma das tecnologias mais inovadoras que surgiu recentemente.

O que é?

Vamos começar pela descrição que todos nós já ouvimos e partir daí: “Node.js é uma plataforma para construir aplicações web escaláveis de alta performance usando JavaScript”.

Ok… Como?

Ele foi construído em cima da engine V8 que interpreta JavaScript, criado pela Google e usado em seu navegador, o Chrome. Isso quer dizer que você utilizará a linguagem pelo lado do servidor também, e não só pelo browser, como normalmente ocorre.

Além disso, ele usa uma arquitetura voltada a eventos, o que se integra muito bem com JavaScript (callbacks!). Usando um loop de eventos, o Node interpreta, em uma única thread, as requisições de forma assíncrona em vez de sequenciais, e não permitindo bloqueios. Isso o torna incrivelmente rápido, perfeito para lidar com um número muito alto de requisições.

Apesar da ideia original ser essa, Node não é só um servidor. Sim, você pode montar servidores http e https, assim como servidores de DNS, TCP, Media Server e etc. Mas agora também é possível criar aplicações desktop com o Node-WebKit e até mesmo ambientes de desenvolvimento para front-end.

Muita informação de uma vez? Vamos tentar explicá-las e mostrar as vantagens deste conjunto.

Por que (e quando) usar Node.js

Até agora temos loop de eventos, assincronicidade, i/o sem bloqueios e alta performance.

O que tudo isso significa? Como eu implemento essas coisas? O que posso fazer com isso?!

O loop de eventos do Node recebe várias requisições, como por exemplo, buscar alguma informação no banco, ler um arquivo no servidor, etc. Depois de executar uma das ações, em vez de esperar a resposta (como esperar o banco responder), ele passa a processar a próxima requisição. Quando a resposta de uma delas é retornada, é disparado um evento e o callback correspondente da requisição, ou seja, a função que deve ser executada como resultado da resposta, é posta na fila para ser executada assim que possível.

Isso é uma forma de lidar com concorrência. O jeito tradicional de fazer isso seria criando múltiplas threads (lembrando que o Node usa uma) para lidar com as diversas requisições. Porém, dentro de cada thread, aquele tempo de espera da resposta não é aproveitado, deixando essa parte da CPU ociosa, bloqueada para outras ações.

Tudo isso quer dizer que, pelo Node, ocorre um ganho muito grande de número de requisições que podem ser processadas, umas das principais vantagens que animaram tantos desenvolvedores a explorar esta tecnologia.

Quem dera uma aplicação tivesse tantas requisições! O que eu posso fazer com ele além disso?
Ok, bom ponto. Mas oras, isso é apenas uma das vantagens.

Por causa de sua natureza, Node.js é ótimo para realizar diversos tipos de projetos, como:

  • APIs;
  • Aplicações web real-time como servidores de chat ou aplicações colaborativas entre múltiplos usuários;
  • Jogos multiplayer;
  • Aplicações que demandam alta escabilidade;
  • Servidores de streaming de dados;

Porém, existem situações onde definitivamente não é recomendado usá-lo. Por usar somente uma thread, ele não serve para lidar com algoritmos complexos que consumam muita CPU, como edição de imagens, por exemplo. Isso essencialmente impediria as outras ações de serem executadas até o processamento estar completo!

Quem usa e o que ganharam com isso?

Quer dizer que Node.js não é uma tecnologia usada somente por entusiastas e curiosos?

Diversas empresas de renome o utilizaram e reportaram suas vantagens:

  • Walmart: Em 2013, resolveu passar todo tráfego mobile pelo Node.js na black-friday (o período mais movimentado do ano) e seus servidores não passaram de 1% de utilização, mesmo em um deploy com 200 milhões de usuários online. Fonte
  • PayPal: Desenvolveu uma mesma aplicação em Java e em Node.js e a segunda foi desenvolvida na metade do tempo com menos pessoas, com 33% menos linhas de código e 40% menos arquivos, além disso dobrou o número de requests-por-segundo em relação a aplicação Java e diminuiu em 35% o tempo de resposta. Fonte
  • Groupon: Diminuiu em 50% o tempo de carregamento da página. Fonte
  • Outras empresas que o utilizam: Netflix, LinkedIn, New York Times, Flickr, Mozilla, Yahoo, etc.

Ok, chega de falação! Vamos ver um pouco de código e como implementar nosso primeiro servidor em Node.js!

Finalmente.

Antes de tudo, vamos instalar o Node.js. Felizmente é extremamente fácil e só é necessário visitar a página oficial, clicar no botão “INSTALL” e baixar o instalador. Para testar se tudo está ok, abra seu terminal (i.e. prompt de comando no Windows) e digite:

node — version

Logo abaixo deve aparecer a versão do Node.js em sua máquina (“v4.1.1” quando este artigo foi escrito).

Agora crie um arquivo chamado servidor.js e escreva o seguinte código:

O começo indica as variáveis que o nosso servidor irá usar,

require(‘http’)

é a forma do Node.js carregar seu módulo http que contém as funções para criar o servidor. Em seguida é criado o servidor em si, colocando-o em uma variável chamada server. Ainda criamos um callback para cada requisição recebida.

Mas ele ainda não faz nada! Vamos continuar:

No caso, res é a variável que indica a nossa resposta que iremos enviar ao usuário. Com ela, definimos no header, com writeHead, que a requisição foi um sucesso (código 200) e o tipo do conteúdo da resposta. Depois, enviamos para o usuário um html com a nossa mensagem.

No final, a função listen é usada para receber as requisições no endereço e na porta definidas com as nossas variáveis, quando feito isso, irá chamar uma outra callback e logar uma mensagem interna.

E é isso, você acaba de implementar seu primeiro servidor de Node.js!

Para ver o seu trabalho, vá até a pasta onde você criou o arquivo e no terminal execute:

node servidor.js

Você deve ver a mensagem que definimos. Depois disso é só abrir o seu navegador e digitar http://localhost:9000/

Esperamos que com isso você dê mais passos e comece a estudar Node.js, uma tecnologia que cada vez mais cresce e já é utilizada por desenvolvedores do mundo inteiro, além dos gigantes do mercado. Aqui na Touch Health usamos Node.js (npm mais especificamente, o gerenciador de pacotes do Node) para gerenciar e consumir dependências feitas em JavaScript, para o desenvolvimento de novas interfaces para o usuário. E você, para o que irá usar essa tecnologia?

Links Úteis

Porque amar é compartilhar, aqui tem alguns links úteis sobre Node.js

Gostou? Não se esqueça de Recomendar e Compartilhar!