Node.js 
Introdução 
Arthur Fücher, Outubro 2014
HOJE 
FALAREMOS 
SOBRE 
1. Apresentação 
2. Node.js: O que é? | Quem usa? | História | Instalação | REPL 
3. Fundamentos: Event-loop, Assíncronicidade, I/O não-bloqueante 
4. NPM 
5. Problemas 
6. Considerações 
2
Apresentação
Arthur Fücher 
SOBRE MIM 
• Técnico em Mecatrônica 
• ADS – FATEC SP 
• TOTVS – Framework SP 
4
Node.js
Node.js 
O QUE É? 
6 
"Node.js® is a platform built on Chrome's JavaScript runtime for easily 
building fast, scalable network applications“ - http://nodejs.org
Node.js 
QUEM USA? 
7
Node.js 
HISTÓRIA 
8 
• 2009 - Ryan Dahl apresenta na JSConf 
• 2010 – Ganha popularidade 
• 2011 - NPM (Node packaged modules) 
• 2014 - "bug fixing, performance tuning, staying up to date with the V8 engine 
and tooling" 
Open Source :) 
http://github.com/joyent/node
Node.js 
INSTALAÇÃO 
9 
• Multiplataforma; 
• Só baixar e instalar, ou compilar! 
• NVM (Linux/Mac)
REPL
Fundamentos: Event-loop, 
Assíncronicidade, I/O não-bloqueante
Event-loop
Event-loop 
Uma thread fica rodando direto 
responsável por monitorar uma fila de 
eventos. 
Quando existe um Evento para ser 
executado, esta thread analisa e faz o 
devido I/O, seja ele processamento, uma 
requisição via internet ou um 
processamento. 
Após executar o evento, ela volta a 
monitorar a fila. 
13
Assíncronicidade
Assíncronicidade 
Como funciona? 
“A aplicação indica que deseja utilizar um I/O em um ponto e utiliza o dado em 
outro ponto (no tempo e espaço).” 
15 
Já anotei a frase bonita… 
Mas o que é de verdade??
I/O não bloqueante
I/O não bloqueante 
Pedro Franceschi (Pagar.me) 
Node.js: serious business 
17
I/O não bloqueante 
Pedro Franceschi (Pagar.me) 
Node.js: serious business 
18
I/O não bloqueante 
Pedro Franceschi (Pagar.me) 
Node.js: serious business 
1.000 requests por segundo com conexão a uma API externa + I/O no DB = 
1.000 threads por segundo 
... se cada request leva em média 10 segundos ... 
Em 9 segundos, teremos 9.000 threads! 
19
I/O não bloqueante 
Pedro Franceschi (Pagar.me) 
Node.js: serious business 
20
I/O não bloqueante 
Pedro Franceschi (Pagar.me) 
Node.js: serious business 
1.000 requests por segundo com conexão a uma API externa + I/O no DB = 1 
thread por segundo 
... se cada request leva em média 10 segundos ... 
Em 9 segundos, teremos 1 thread! 
21
NPM: Node Packaged Modules
MÓDULOS 
“Modularizar é um conceito onde o sistema ou software é divido em partes 
distintas” by Wikipedia 
O Node.js implementa o padrão de módulos definido pelo CommonJS. 
Possui módulos nativos: Console, HTTP, Eventos,... 
//my_module.js 
module.exports = { 
version : function(){ console.log("1.0.0");}, 
say_hello : function(){console.log("Hello World");} 
} 
NPM 
23
NODE PACKAGED 
MODULES 
• Mais de 99mil pacotes! 
• 500M de downloads/mês 
• Qualquer um pode publicar um pacote 
• https://www.npmjs.org/ 
NPM 
24
package.json 
Arquivo de definição do módulo/aplicação. 
Possui informações como: 
• Nome; 
• Versão 
• Dependências 
>npm init 
NPM 
25
PROBLEMAS
JAVASCRIPT 
Problemas que o Javascript traz: 
- Facilidade de não seguir padrões; 
- Difícil usar e entender Orientação a objetos; 
- Bizarrices: 
PROBLEMAS 
27 
http://wtfjs.com/
UMA THREAD 
PROBLEMAS 
Aplicações que precisam de muito processamento travam a thread, e com isso 
toda a aplicação. 
O Node.js possui apenas uma thread, portanto erros não tratados param a 
aplicação. 
28
CALLBACK HELL 
doAsync1(function (err, data) { 
doAsync2(data, function (err, data2) { 
doAsync3(data2, function (err, data3) { 
doAsync4(data3, function (err, data4) { 
doAsync5(data4, function (err, data5) { 
//Do some stuff... 
}); 
}); 
}); 
}); 
}); 
PROBLEMAS 
29 
Código orientado a Hadouken ;)
Considerações
Considerações 
E agora? Próximos passos 
31 
Ao se escolher uma tecnologia é necessário analisar o problema e a solução. 
Node.js é muito bom, porém não é bala de prata!! 
Baixe, e rode! 
Entre em contato com a comunidade: 
NodeBR - http://nodebr.org/ 
Canal IRC - #nodebr
Bibliografia 
Para saber mais 
32 
• WILSON, Jim R. Node.js the Right Way: Pratical, Server-Side Javascript That Scales. Pragmatic exPress, 
2013. 
• PEREIRA, Caio Ribeiro. Node.js: Aplicações web real-time com Node.js. Casa do Código, 2013 
• CROCKFORD, Douglas. O melhor do Javascript. Alta Books, 2008. 
• FRANCESCHI, Pedro. Node.js: Serious business. Disponível em: 
http://pt.slideshare.net/PedroFranceschi/palestra-nodejs . 
• Empresas que usam Node.js. Disponível em: https://github.com/joyent/node/wiki/Projects%2C-Applications% 
2C-and-Companies-Using-Node Acessado em 10/10/2014. 
• Node.js - http://nodejs.org/ 
• NPM - https://www.npmjs.org/
Arthur Fücher 
Framework SP 
arthur.fucher@totvs.com.br 
@thur 
Obrigado ;)

Introdução ao Node.js - FATEC SP

  • 1.
    Node.js Introdução ArthurFücher, Outubro 2014
  • 2.
    HOJE FALAREMOS SOBRE 1. Apresentação 2. Node.js: O que é? | Quem usa? | História | Instalação | REPL 3. Fundamentos: Event-loop, Assíncronicidade, I/O não-bloqueante 4. NPM 5. Problemas 6. Considerações 2
  • 3.
  • 4.
    Arthur Fücher SOBREMIM • Técnico em Mecatrônica • ADS – FATEC SP • TOTVS – Framework SP 4
  • 5.
  • 6.
    Node.js O QUEÉ? 6 "Node.js® is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications“ - http://nodejs.org
  • 7.
  • 8.
    Node.js HISTÓRIA 8 • 2009 - Ryan Dahl apresenta na JSConf • 2010 – Ganha popularidade • 2011 - NPM (Node packaged modules) • 2014 - "bug fixing, performance tuning, staying up to date with the V8 engine and tooling" Open Source :) http://github.com/joyent/node
  • 9.
    Node.js INSTALAÇÃO 9 • Multiplataforma; • Só baixar e instalar, ou compilar! • NVM (Linux/Mac)
  • 10.
  • 11.
  • 12.
  • 13.
    Event-loop Uma threadfica rodando direto responsável por monitorar uma fila de eventos. Quando existe um Evento para ser executado, esta thread analisa e faz o devido I/O, seja ele processamento, uma requisição via internet ou um processamento. Após executar o evento, ela volta a monitorar a fila. 13
  • 14.
  • 15.
    Assíncronicidade Como funciona? “A aplicação indica que deseja utilizar um I/O em um ponto e utiliza o dado em outro ponto (no tempo e espaço).” 15 Já anotei a frase bonita… Mas o que é de verdade??
  • 16.
  • 17.
    I/O não bloqueante Pedro Franceschi (Pagar.me) Node.js: serious business 17
  • 18.
    I/O não bloqueante Pedro Franceschi (Pagar.me) Node.js: serious business 18
  • 19.
    I/O não bloqueante Pedro Franceschi (Pagar.me) Node.js: serious business 1.000 requests por segundo com conexão a uma API externa + I/O no DB = 1.000 threads por segundo ... se cada request leva em média 10 segundos ... Em 9 segundos, teremos 9.000 threads! 19
  • 20.
    I/O não bloqueante Pedro Franceschi (Pagar.me) Node.js: serious business 20
  • 21.
    I/O não bloqueante Pedro Franceschi (Pagar.me) Node.js: serious business 1.000 requests por segundo com conexão a uma API externa + I/O no DB = 1 thread por segundo ... se cada request leva em média 10 segundos ... Em 9 segundos, teremos 1 thread! 21
  • 22.
  • 23.
    MÓDULOS “Modularizar éum conceito onde o sistema ou software é divido em partes distintas” by Wikipedia O Node.js implementa o padrão de módulos definido pelo CommonJS. Possui módulos nativos: Console, HTTP, Eventos,... //my_module.js module.exports = { version : function(){ console.log("1.0.0");}, say_hello : function(){console.log("Hello World");} } NPM 23
  • 24.
    NODE PACKAGED MODULES • Mais de 99mil pacotes! • 500M de downloads/mês • Qualquer um pode publicar um pacote • https://www.npmjs.org/ NPM 24
  • 25.
    package.json Arquivo dedefinição do módulo/aplicação. Possui informações como: • Nome; • Versão • Dependências >npm init NPM 25
  • 26.
  • 27.
    JAVASCRIPT Problemas queo Javascript traz: - Facilidade de não seguir padrões; - Difícil usar e entender Orientação a objetos; - Bizarrices: PROBLEMAS 27 http://wtfjs.com/
  • 28.
    UMA THREAD PROBLEMAS Aplicações que precisam de muito processamento travam a thread, e com isso toda a aplicação. O Node.js possui apenas uma thread, portanto erros não tratados param a aplicação. 28
  • 29.
    CALLBACK HELL doAsync1(function(err, data) { doAsync2(data, function (err, data2) { doAsync3(data2, function (err, data3) { doAsync4(data3, function (err, data4) { doAsync5(data4, function (err, data5) { //Do some stuff... }); }); }); }); }); PROBLEMAS 29 Código orientado a Hadouken ;)
  • 30.
  • 31.
    Considerações E agora?Próximos passos 31 Ao se escolher uma tecnologia é necessário analisar o problema e a solução. Node.js é muito bom, porém não é bala de prata!! Baixe, e rode! Entre em contato com a comunidade: NodeBR - http://nodebr.org/ Canal IRC - #nodebr
  • 32.
    Bibliografia Para sabermais 32 • WILSON, Jim R. Node.js the Right Way: Pratical, Server-Side Javascript That Scales. Pragmatic exPress, 2013. • PEREIRA, Caio Ribeiro. Node.js: Aplicações web real-time com Node.js. Casa do Código, 2013 • CROCKFORD, Douglas. O melhor do Javascript. Alta Books, 2008. • FRANCESCHI, Pedro. Node.js: Serious business. Disponível em: http://pt.slideshare.net/PedroFranceschi/palestra-nodejs . • Empresas que usam Node.js. Disponível em: https://github.com/joyent/node/wiki/Projects%2C-Applications% 2C-and-Companies-Using-Node Acessado em 10/10/2014. • Node.js - http://nodejs.org/ • NPM - https://www.npmjs.org/
  • 33.
    Arthur Fücher FrameworkSP arthur.fucher@totvs.com.br @thur Obrigado ;)

Notas do Editor

  • #8 Microsoft – Core Contributor
  • #9 Ryan Dahl apresenta o Node, e diz que o intuito é ter uma interface de baixo nível para programadores 2011 – Microsoft contribui pra funcionar no Windows
  • #11 Read Eval Print Loop
  • #16 Exemplo do Restaurante... Pra explicar melhor, passar para I/O não bloqueante.
  • #18 Exemplo do Restaurante...
  • #19 Exemplo do Restaurante...
  • #20 Exemplo do Restaurante...
  • #21 Exemplo do Restaurante...
  • #22 Exemplo do Restaurante...