Você está na página 1de 11

• História

• O que é
• Funcionamento
• NPM
• Pacote / Módulo
• Utilização
• Instalação

Node.js
História

 Foi anunciado em 2009 pelo pesquisador Ryan Dahl e desenvolvido junto a mais 14 colaboradores. Ele nasceu
pela observação de como os servidores web trabalhavam e se comportavam nesta época.

 Ele analisou que ações simples de uma aplicação web podem realizar muitas requisições, como o carregar de
uma barra de progresso, gerando consumo excessivo de recursos no servidor(CPU, RAM, etc...).

 Testou várias linguagens, antes de escolher o Javascript.

 Apresentou na “JSConf EU” uma combinação do motor Javascript V8, com um event-loop fornecido por uma
API de Input/Output de baixo nível chamada libuv, feita em C++.

 Apresentação original:
https://pt.slideshare.net/AartiParikh/original-slides-from-ryan-dahls-nodejs-intro-talk

Node.js 2
O que é
 O Node.js (Node) para o Ryan Dahl é um “conjunto de bibliotecas que são executadas no mecanismo V8,
permitindo executar o código Javascript no servidor”.

 De forma muito resumida, ele permite que executemos Javascript no servidor, mantendo seu conceito de single-
thread, sem bloquear as requisições ou execuções.

 Ele é composto por:


 Motor Javascript V8 da Google: https://v8.dev/
 Libuv: https://libuv.org/
 http-parser: https://github.com/nodejs/http-parser
 c-ares: https://c-ares.haxx.se/
 OpenSSL: https://www.openssl.org/
 Zlib: https://zlib.net/
Fonte: https://dev.to/khaosdoctor

Node.js 3
Funcionamento – Outros servidores
 Normalmente, os servidores de aplicações web criam uma thread para cada requisição, podendo assim processar
o que foi solicitado, sem bloquear novas requisições.

 Essas requisições podem demorar para serem processadas, deixando os recursos alocados parados até que tudo
seja concluído.

 Quanto mais requisições, mais poder de CPU e quantidade de RAM são necessários.

Ao lado temos o comparativo utilizado por Ryan Dahl em sua


apresentação do Node, que demonstra um comparativo entre o
consumo de memória entre o Apache(multi-thread) e o
Nginx(single-thread), ambos servidores de páginas PHP.

Quanto mais requisições, maior foi o consumo.

Node.js 4
Funcionamento - Node

 O Node utiliza um Event Loop que é single-thread para gerenciar as requisições. Cada nova requisição é tratada
como um evento e colocado em uma fila.

 O V8 gerencia essa fila através de processamento assíncrono (não-bloqueante), nenhuma operação precisa que a
anterior seja finalizada.

 Toda vez que é solicitado um processamento bloqueante(Banco de dados, Arquivos do sistema), o V8 delega
essa atividade para a Libuv, ficando disponível para novos eventos.

 A Libuv é multi-thread (inicialmente com 4), aqui chamado de pool de threads, ela faz os processamentos de
rede, bancos de dados, arquivos de sistema, entre outras operações.

 Após o processamento, a reposta(callback) é enviada de volta para o Event Loop.

Node.js 5
Funcionamento – Visão Gráfica
Computation
Requests king ns
oc i o
Bl erat Thread Database
Op Pool
File System
Event
Loop
Event
Queue Single-
Thread

No
O n-B I/O Pooling,
pe lo
r a ck calculations, etc...
ti o i n
ns g

Node.js 6
NPM

 O Node Package Manager(Gerenciador de Pacotes do Node) não é a mesma coisa que o Node.

 Atualmente ele faz parte do instalador padrão do Node.

 É um cliente de linha de comandos para auxiliar na instalação, gerenciamento da versões e desinstalação de


pacotes(dependências) de um projeto.

 É um repositório utilizado para a publicação de projetos Node de código aberto (open-source), ou seja, uma
plataforma online onde qualquer pessoa pode publicar e compartilhar ferramentas escritas em Javascript.

Node.js 7
Pacote / Módulo
 Um pacote em Node.js contém todos os arquivos de que você precisa para um módulo.

 Módulos são bibliotecas Javascript que você pode incluir em seu projeto.

 Instalar e gerenciar módulos é uma das coisas mais básicas que você deve aprender a fazer quando começar a
usar o gerenciador de pacote Node.

Node.js 8
Utilização

 Utilizado para criação de APIs(Application Programming Interface), que são interfaces que facilitam a troca de
informações entre projetos, aplicações, equipamentos, mesmo que estes não tenham sido escritos com a mesma
linguagem.

 Execução de códigos e frameworks Javascript.

 É gerenciado através do NPM.

 Todos as configurações de projeto e definições de dependências são armazenadas no arquivo “package.json”


localizado na raiz do projeto

Node.js 9
Comandos comuns
Comando Descrição
npm init Cria o arquivo package.json com as definições e configurações do projeto.
Adiciona a dependência do pacote no package.json e faz sua instalação no
npm install <pacote>
projeto.
npm update Atualiza todos os pacotes do projeto.
npm update <pacote> Atualiza somente o pacote informado.
Remove a dependência do pacote no package.json e faz sua desinstalação no
npm uninstall <pacote>
projeto
Faz a instalação global do pacote, permite sua execução direta pelo prompt de
npm install –g <pacote>
comando.
npm uninstall –g <pacote> Faz a desinstalação global do pacote.

Para mais comandos e informações: https://docs.npmjs.com/cli

Node.js 10
Instalação
 O node está disponível para sistemas operacionais Windows, Linux e Mac.

 Sempre utilize as versões mais recentes do tipo LTS.

 Para instalação no Windows e Mac, recomendo o download através da página oficial: https://nodejs.org/

 Para instalação no Linux recomendo a utilização do NodeSource: https://github.com/nodesource/distributions

Node.js 11

Você também pode gostar