Por que Node.js para Web?
Tags: webdev, javascript, node
Published: 2018-02-12 14:46:26

---
title: Por que Node.js para Web?
published: true
description: how choose a right tecnology to be a web dev
tags: #webdev #javascript #node #nodejs
---

Muitas vezes vem aquela dúvida sobre qual linguagem utilizar para fazer seu back-end e porquê. Há diversas linguagens e cada uma com seu diferencial e propósito, a pesar de várias poderem ser usadas para criar back-ends algumas delas tem chamado mais atenção.

![cat confuss](https://thepracticaldev.s3.amazonaws.com/i/pwlepwh5xp1mugb52l16.png)

É claro que não existe resposta mágica, muito menos pronta para essa pergunta, mas fica aqui aquela solução genérica que serve para quase todos os casos.

O objetivo deste post é mostrar como o Javascript funciona e se ele se encaixa no que você pretende fazer, e não a ensinar como fazer o seu servidor, pois como a linguagem é muito conhecida e tem uma comunidade incrivelmente grande é muito fácil de achar exemplos, inclusive nos links das recomendações abaixo do post.

##Primeiro é importante saber o que é o Javascript e como ele atua.

Javascript é uma linguagem interpretada, multi-paradigma, tipagem dinâmica e foi criada originalmente para executar no front-end das aplicações web, ou seja, navegadores. Segundo este projeto do github: https://madnight.github.io/githut que está atualizado e serve de boa referência, o javascript vem dominando o número de projetos abertos no github.


![graph](https://cdn-images-1.medium.com/max/800/1*cZvMqoVXVrMNG1sRTNaLaw.png)
GitHut, mostrando dados de 2017 e mostra JavaScript em primeiro lugar.

Um ótimo exemplo de como o JavaScript atua é o Google’s V8, você pode encontrar mais informações [aqui](https://developers.google.com/v8/), que é usado no Google Chrome e no Node.js, que vamos falar um pouco mais adiante.

O JavaScript é uma linguagem de programação de uma única Thread, que em poucas palavras significa que ela só pode fazer uma coisa de cada vez. 
Possui uma pilha de chamadas ou Call Stack, que é uma estrutura que regista em que parte o programa está rodando. Como o Call Stack é uma pilha, sempre que se entra em uma função, ela é colocada na parte superior da pilha, se é retornado de uma função, é tirado do topo dela.


![cat stack](https://cdn-images-1.medium.com/max/800/1*baGg851dyIA4HmCcxrwl4Q.jpeg)

Por sua arquitetura ser baseada a eventos, a sua única Thread é responsável apenas por escutar esses eventos, para que eles sejam chamados assim que detectados, por interpretar desta meneira a linguagem garante que não haverá bloqueios. Pelo fato das requisições não serem sequenciais e sim assíncronas, faz a execução ser incrivelmente rápida e perfeita para alto número de requisições. Por conta disso não demorou até que a usassem no back-end.


![cat insterested](https://cdn-images-1.medium.com/max/800/1*yDgmWjzJIm8lWxNAaB3pkw.jpeg
)

##Ok, mas e o Node.js?

Basicamente ele usa tudo que vimos acima só que executando do lado do servidor.
Lembrando que o Node é apenas uma máquina de execução do JavaScript, junto dele temos o gerenciador de pacotes NPM, que faz um trabalho execelente para podermos usar bibliotecas e frameworks de forma simples e rápida, similar ao de outras linguagens como Composer para o PHP, ele mantém um arquivo no formato JSON sobre os dados e dependencias do seu projeto.

Tudo bem… agora a grande resposta do título.

Escolher o Node para WEB tem suas vantagens dependendo do tipo de projeto que esteja planejando usar, pois ele funciona de maneira simples, elegante, de fácil manuntenção, fácil implementação e tem alta escalabilidade (É o que todos nós queremos, rs).

Portanto se o seu projeto precisar primordialmente de:
1. **APIs:**
O tempo de resposta e a quantidade de requisições para as APIs é muito importante para qualquer servidor. O Node.js já foi criado exatamente para resolver esse tipo de situação sem perder performance ou consumir muitos recursos do hardware.
Aqui vai uma ótima recomendação de um framework que lida nativamente com Restful API: [Loopback](https://loopback.io/).
2. **Aplicações em tempo real e jogos multiplayer:**
Como aplicações em tempo real são naturalmente multi-usuários, o Node consegue facilmente manter alto número de tráfego e uso intenso dados transitando em diferentes dispositivos, por manter uma comunição assíncrona é considerado uma das melhores alternativas neste tipo de cenário.
Um framework que foi feito para tratar de informações em tempo real : [Sails](https://sailsjs.com/).
3. **Streaming de dados:**
Leitura e escrita é algo custoso para qualquer linguagem de programação, porém por funcionar de forma assíncrona o Node emprega menos esforço para fazê-lo.
Duas bibliotecas que foram desenvolvidas para comunicação em tempo real focados para streaming: [Socket.io](https://www.npmjs.com/package/socket.io-stream) e o [Kurunt](https://www.npmjs.com/package/kurunt).
4. **Internet das Coisas:**
Nenhum motivo da arquitetura em especial, porém uma ferramenta para programação fez com que muitos desenvolvedores IOTs fizessem seus servidores em Node foi o [Node-Red](https://nodered.org/) que facilitou a criação de servidores de forma fácil e intuitiva, para que não se precise perder tempo.


####Para saber mais sobre Node:
1. [Node.js](https://nodejs.org/en/)
2. [Post sobre lugares que usam Node](http://www.luiztools.com.br/post/por-que-aprender-nodejs/)


####Refencias:
1. https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf
2. https://www.treinaweb.com.br/blog/node-js-por-que-voce-deve-conhecer-essa-tecnologia/
3. https://medium.com/thdesenvolvedores/node-js-o-que-%C3%A9-por-que-usar-e-primeiros-passos-1118f771b889