SlideShare uma empresa Scribd logo
Nodejs - Os Primeiros Passos
JACKSON FERREIRA DE ANDRADE MAFRA
Desenvolvedor há mais de 20 anos com background em projetos de e-commerce e real estate, desde
2009 com interesses focados para o desenvolvimento de interfaces móveis e aplicações MEAP.
Me chama lá...
http://about.me/jacksonfdam
http://linkedin.com/in/jacksonfdam
@jacksonfdam
O JavaScript, durante muito tempo, não foi uma linguagem respeitada. Era
considerada uma linguagem de amadores e, por de fato ser utilizada por
muitos programadores inexperientes, gerava códigos mal-escritos. O JS
mudou e moldou a web, deu muito mais poder aos desenvolvedores, e se
estabeleceu permanentemente como a linguagem de scripts para a web.
Hoje, o JavaScript se reinventou mais uma vez, e mais uma vez, está
entregando nas mãos dos desenvolvedores o poder de mudar o
desenvolvimento. Vamos conhecer como iniciar o caminho a ser percorrido
para que você adentre o mundo da plataforma que está disponível em
centenas de milhões de aplicações, e, num breve futuro, alcance o grau de
profissionalismo para aproveitar grandes oportunidades de mercado.
Javascript
O mundo do JavaScript tomou outra dimensão a partir do momento que o
ecossistema node/npm explodiu. Com ele, tanto a comunidade quanto as
empresas, começaram a enxergar o verdadeiro potencial da linguagem.
Javascript
Com o seu sucesso e crescimento, não demorou para que saísse uma nova
versão da especificação ECMAScript que levasse a linguagem para o
próximo nível. Foi então que saiu o ES6 (ou ECMAScript 2015, se preferir),
trazendo uma série de melhorias significativas.
Javascript
Para obter conhecimento abrangente ("domínio") de JavaScript, você
precisa estar familiarizado com a totalidade das especificações ECMAScript
sobre as quais se baseia.
JavaScript sua sintaxe, ES2017, melhores práticas, pitfalls, async/promises
Javascript
● Classes
● Object Methods
● Getters e Setters
● Dados privados
● Herança
● Parâmetros Padrão
● Um novo for: for.. of
● Declaração de valores, escopo e hoisting
● Uma nova maneira de extrair dados de
arrays e objetos
● Trabalhando com Strings
● Template literals
● Multi-line strings
● Funções
● Múltiplos retornos em uma função
Javascript
O uso de ES6 deixa a sintaxe do JavaScript muito mais elegante e de fácil
entendimento fora suas novas funcionalidades que adicionaram mais poder
a linguagem.
Frameworks novos ou antigos já estão nascendo ou sendo migrados para
essa nova sintaxe por isso recomendo fortemente que você tire um tempo
para estudar mais sobre ela.
Javascript
Também podemos transpilar código ES5 para ES6 utilizando o Lebab (sim,
Babel ao contrário).
Conhecendo o node.js
Segundo próprio site: “o node.js é uma plataforma construída sobre o
runtime do Chrome, para facilitar a construção de aplicativos escaláveis,
usando um modelo baseado em eventos, não bloqueável que o torna leve e
eficiente. Ideal para aplicativos com uso intensivo de dados, ou em tempo
real capaz de rodar em sistemas diversos”.
Conhecendo o node.js
Trocando em miúdos: trata-se um conjunto de bibliotecas, desenvolvidas
em C++, na forma de um aplicativo que permite a execução de código
escrito em javascript na linha de comando da sua máquina.
Conhecendo o node.js
Runtime do Chrome
Para ser simples o node.js baseia-se no V8, uma máquina virtual, em código
aberto, que está sendo exaustivamente desenvolvida pelo Google para o
Chrome. As ambições do V8 incluem: ser mais rápido, independente da
plataforma e mais estável que os engines, e máquinas virtuais, que andam
por ai, populando nossos navegadores e permitindo o uso de javascript em
páginas HTML.
Conhecendo o node.js
Não bloqueável
A web está evoluindo. Originalmente usávamos a web apenas para
consumir conteúdo estático. Fotos de gatos, por exemplo. Hoje usamos para
convivência, interação social em sites úteis como o Facebook, onde
podemos ver fotos de gatos, publicadas por pessoas que você respeitava,
quase em tempo real.
Conhecendo o node.js
Não bloqueável
Queremos o tempo real. Queremos conversar, ler e postar, todo o tempo e o
tempo todo. Qualquer um com experiência de desenvolvimento web sabe
que as requisições HTTP não foram feitas para este cenário. Na verdade,
não foram feitas nem para ver as fotos de gatos. O processo de requisição e
resposta utilizado pelo protocolo HTTP é lento, arcaico e baseado em
textos.
Conhecendo o node.js
Não bloqueável
Quando usamos uma linguagem de programação como o PHP, ou o Java,
sobre um servidor web como o Apache, com ou sem o Tomcat, cada
requisição gera um thread que, por sua vez, provoca a alocação de um
determinado espaço de memória.
Conhecendo o node.js
Não bloqueável
Digamos, apenas para ilustrar, que sejam 1,5Mbytes por conexão. Se assim
for, um servidor com 4 Gbytes, será capaz de suportar alguma coisa
próximo a 2600 clientes simultâneos. Parece bom? Não é. E olhe que eu
nem estou falando dos ciclos e mais ciclos de cpu que são gastos apenas
para ficar mudando de thread. Neste esquema, um aumento na demanda só
pode ser atendido com alterações na infraestrutura ou na arquitetura do
aplicativo. Em língua de gente: caro, muito caro.
Conhecendo o node.js
Não bloqueável
Na esperança de resolver este problema o node.js adota um único thread,
que não pode ser bloqueado por nenhuma requisição de entrada/saída, para
tratar todas as requisições que o servidor recebe. A ideia original, o node.js
foi criado por Ryan Dahl em 2009, pode ter sido a fomentadora de outras
iniciativas na mesma direção: como a tecnologia usada nos servidores web
mais modernos como o Nginx e o Thin e em projetos parecidos com o
node.js para o Python (Twisted) e para o Ruby (EventMachine). Nada como
a cópia e a adoção desenfreada de uma tecnologia para validar sua
utilização.
Conhecendo o node.js
Não bloqueável
O conceito por trás do nodel.js é simples: toda e qualquer requisição é
tratada pelo sistema servidor em um único thread, sem a alocação de
memória extra necessária e sem ciclos de cpu desperdiçados na alternância
de threads.
Conhecendo o node.js
Baseado em eventos
Formalmente, pode-se dizer que o node.js usa uma arquitetura baseada em
eventos de I/O não-blocante. I/O, ou E/S como se usa em português do
Brasil, é um termo que se refere a toda operação, feita entre a CPU e
qualquer outro dispositivo, por exemplo o disco. No caso da web, este termo
é aplicado a tarefas que serão executadas fora do thread principal, por
exemplo consultas a bancos de dados. Então, do ponto de vista do node.js,
operação de I/O é qualquer operação que precise ser executada fora do
thread principal.
Conhecendo o node.js
Baseado em eventos
O não-blocante indica que nenhuma operação de I/O irá interromper o
fluxo do thread principal. Ou seja, todas as requisições serão executadas, e
nenhuma delas será capaz de interromper o processamento das outras
enquanto termina de enviar dados.
Conhecendo o node.js
Baseado em eventos
O que o node.js faz é criar um laço onde toda e qualquer operação
assíncrona de entrada e saída gera um evento.
Cada chamada a uma função externa ao thread principal pendura uma
função de callback neste laço. Assim que o evento ocorre o callback
correspondente é chamado.
Conhecendo o node.js
Um desenvolvedor que trabalha com Node.js é um back-end ou um front-
end?
Nós trabalhamos com uma linguagem de programação, que pode ser usada
tanto no front, quanto no back e pronto.
Conhecendo o node.js
A partir de uma ideia tão legal quanto o Node.js, surgiu o io.js.
O io.js apareceu em Dezembro de 2014, a partir de um fork do Node feito
pelo Fedor Indutny (que pela lista do Node, foi o 112 contribuidor do Node),
mas que era um integrante core do time.
Conhecendo o node.js
A plataforma inteira do Node pode rodar em Linux, OS X ou FreeBSD e até
em Windows. Como várias linguagens, o Node também pode ser controlada
via linha de comando.
Conhecendo o node.js
Linux é padrão: é um dos sabores mais conhecidos do mercado. Um pouco
de file descriptors, conceitos de daemon, até mesmo saber como visualizar
seu processo e os recursos que ele está consumindo (aquele ps basicão, lsof,
curl, etc) e entender o Sistema Operacional é sempre bom.
Conhecendo o node.js
C++ é aquele diferencial, não essencial mas legal. C++ é tipo chocolate:
basicão, tá aí desde sempre e quase tudo é feito em cima dele.
É bom (não essencial) quando temos uma curiosidade para olhar o código do
V8, ver como é feita a libuv, criar uns binds marotos, fazer um dtrace e suas
probes, enfim, se der deu.
Node.js● HTTP metodos/verbos, status
● Node.js internals (workers, V8, GC, bailout, workers, memória, looping, libuv)
● Processos, threads, testes de integração, unitários
● Performance
● Monitoração
● Logs
● 12 fatores sobre aplicação (https://12factor.net/pt_br/)
Node.js
● Npm
● Nodemon
● Forever
● Sequelize
● Express
● Nunjucks
Node.js
● Consign: Para realizar autoload de módulos
● Body-parser: Para receber parâmetros de formulários trafegados em
requests.
● Express-validator: Para validação de dados
● Express-session: Para criação de variáveis de sessão
● Crypto: Para criptografia de dados utilizando MD5
● Connect-Multiparty: Para upload de arquivos
Perguntas?

Mais conteúdo relacionado

Mais procurados

Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
Rafael Soares
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
Mario Guedes
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à prática
Mario Guedes
 
Workshop Node JS - Nível Básico
Workshop Node JS - Nível BásicoWorkshop Node JS - Nível Básico
Workshop Node JS - Nível Básico
inopus
 
Node js - O poder do JavaScript do lado do servidor
Node js  - O poder do JavaScript do lado do servidorNode js  - O poder do JavaScript do lado do servidor
Node js - O poder do JavaScript do lado do servidor
Romulo Fagundes
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
Mario Guedes
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizado
Vinícius Krolow
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?
Mario Guedes
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Mario Guedes
 
Programação para Web II: NodeJS
Programação para Web II:  NodeJSProgramação para Web II:  NodeJS
Programação para Web II: NodeJS
Alex Camargo
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
Adler Medrado
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
Vitor Mattos
 
JavaScript: uma visão geral da linguagem e seu ecossistema
JavaScript: uma visão geral da linguagem e seu ecossistemaJavaScript: uma visão geral da linguagem e seu ecossistema
JavaScript: uma visão geral da linguagem e seu ecossistema
Fabio Agostinho Boris
 
Aula09 - Java Script
Aula09 - Java ScriptAula09 - Java Script
Aula09 - Java Script
Jorge Ávila Miranda
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client Library
Mario Guedes
 
Wordpress
WordpressWordpress
Pouch db tdc2016
Pouch db tdc2016Pouch db tdc2016
Pouch db tdc2016
Itacir Pompeu
 
JavaScript
JavaScriptJavaScript
JavaScript
andreluizlc
 
Java web
Java webJava web
Java web
Regis Melo
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
Hudson Brendon
 

Mais procurados (20)

Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à prática
 
Workshop Node JS - Nível Básico
Workshop Node JS - Nível BásicoWorkshop Node JS - Nível Básico
Workshop Node JS - Nível Básico
 
Node js - O poder do JavaScript do lado do servidor
Node js  - O poder do JavaScript do lado do servidorNode js  - O poder do JavaScript do lado do servidor
Node js - O poder do JavaScript do lado do servidor
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizado
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
 
Programação para Web II: NodeJS
Programação para Web II:  NodeJSProgramação para Web II:  NodeJS
Programação para Web II: NodeJS
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
 
Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
 
JavaScript: uma visão geral da linguagem e seu ecossistema
JavaScript: uma visão geral da linguagem e seu ecossistemaJavaScript: uma visão geral da linguagem e seu ecossistema
JavaScript: uma visão geral da linguagem e seu ecossistema
 
Aula09 - Java Script
Aula09 - Java ScriptAula09 - Java Script
Aula09 - Java Script
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client Library
 
Wordpress
WordpressWordpress
Wordpress
 
Pouch db tdc2016
Pouch db tdc2016Pouch db tdc2016
Pouch db tdc2016
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Java web
Java webJava web
Java web
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
 

Semelhante a Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos

Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
Just Digital
 
Node.js
Node.jsNode.js
Node.js
luizhse
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
Valmir Justo
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
Pablo Souza
 
Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptx
MarceloRosenbrock1
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
Rodrigo Branas
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Vinicius Reis
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
Filipe Falcão
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
Caio Ribeiro Pereira
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
michel adriano medeiros
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
Wendreo L. Fernandes
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
Rodrigo Rodrigues
 
NoSQL + Node.js
NoSQL + Node.jsNoSQL + Node.js
NoSQL + Node.js
Henrique Gogó
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
Ruben Marcus Luz Paschoarelli
 
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
Vinicius de Sá
 
Netbeans Slides Fy2009 Portugues
Netbeans Slides Fy2009 PortuguesNetbeans Slides Fy2009 Portugues
Netbeans Slides Fy2009 Portugues
Rodrigo Peleias
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
thiagolima
 
SPA's com Blazor e .NET Core
SPA's com Blazor e .NET CoreSPA's com Blazor e .NET Core
SPA's com Blazor e .NET Core
Gustavo Bellini Bigardi
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
Jaydson Gomes
 
Introdução ao Nodejs
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
Márcio Silvestroni
 

Semelhante a Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos (20)

Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Node.js
Node.jsNode.js
Node.js
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
 
Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptx
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
NoSQL + Node.js
NoSQL + Node.jsNoSQL + Node.js
NoSQL + Node.js
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
[LatinoWare 2012] Mini Curso PHP 5.4 + MongoDB
 
Netbeans Slides Fy2009 Portugues
Netbeans Slides Fy2009 PortuguesNetbeans Slides Fy2009 Portugues
Netbeans Slides Fy2009 Portugues
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
SPA's com Blazor e .NET Core
SPA's com Blazor e .NET CoreSPA's com Blazor e .NET Core
SPA's com Blazor e .NET Core
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 
Introdução ao Nodejs
Introdução ao NodejsIntrodução ao Nodejs
Introdução ao Nodejs
 

Mais de Jackson F. de A. Mafra

PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
Jackson F. de A. Mafra
 
PHP SSO no Zentyal
PHP SSO no ZentyalPHP SSO no Zentyal
PHP SSO no Zentyal
Jackson F. de A. Mafra
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
Jackson F. de A. Mafra
 
O que você precisa saber sobre chatbots
O que você precisa saber sobre chatbotsO que você precisa saber sobre chatbots
O que você precisa saber sobre chatbots
Jackson F. de A. Mafra
 
WCPOA2019 - WordPress como um backend de seus aplicativos
WCPOA2019  - WordPress como um backend de seus aplicativosWCPOA2019  - WordPress como um backend de seus aplicativos
WCPOA2019 - WordPress como um backend de seus aplicativos
Jackson F. de A. Mafra
 
WordPress como um backend de seus aplicativos
WordPress como um backend de seus aplicativosWordPress como um backend de seus aplicativos
WordPress como um backend de seus aplicativos
Jackson F. de A. Mafra
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPress
Jackson F. de A. Mafra
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Jackson F. de A. Mafra
 
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
Jackson F. de A. Mafra
 
Hangout Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
Hangout  Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...Hangout  Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
Hangout Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
Jackson F. de A. Mafra
 
Hangout Tempo Real Eventos - Javascript - Os Primeiros Passos
Hangout  Tempo Real Eventos - Javascript - Os Primeiros PassosHangout  Tempo Real Eventos - Javascript - Os Primeiros Passos
Hangout Tempo Real Eventos - Javascript - Os Primeiros Passos
Jackson F. de A. Mafra
 
Desmistificando o DialogFlow
Desmistificando o DialogFlowDesmistificando o DialogFlow
Desmistificando o DialogFlow
Jackson F. de A. Mafra
 
ChatOps (ChatBots + DevOps)
ChatOps (ChatBots + DevOps) ChatOps (ChatBots + DevOps)
ChatOps (ChatBots + DevOps)
Jackson F. de A. Mafra
 
Conexao kinghost - Vendas inteligentes com intelibots
Conexao kinghost - Vendas inteligentes com intelibotsConexao kinghost - Vendas inteligentes com intelibots
Conexao kinghost - Vendas inteligentes com intelibots
Jackson F. de A. Mafra
 
WoMakersCode 2016 - Shit Happens
WoMakersCode 2016 -  Shit HappensWoMakersCode 2016 -  Shit Happens
WoMakersCode 2016 - Shit Happens
Jackson F. de A. Mafra
 
Phalcon 2 High Performance APIs - DevWeekPOA 2015
Phalcon 2 High Performance APIs - DevWeekPOA 2015Phalcon 2 High Performance APIs - DevWeekPOA 2015
Phalcon 2 High Performance APIs - DevWeekPOA 2015
Jackson F. de A. Mafra
 
Dev Heroes
Dev HeroesDev Heroes
Trilha Android - Android Evolved
Trilha Android - Android EvolvedTrilha Android - Android Evolved
Trilha Android - Android Evolved
Jackson F. de A. Mafra
 
TDC 2015 - POA - Trilha PHP - Shit Happens
TDC 2015 - POA - Trilha PHP - Shit HappensTDC 2015 - POA - Trilha PHP - Shit Happens
TDC 2015 - POA - Trilha PHP - Shit Happens
Jackson F. de A. Mafra
 
Material design
Material designMaterial design
Material design
Jackson F. de A. Mafra
 

Mais de Jackson F. de A. Mafra (20)

PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
 
PHP SSO no Zentyal
PHP SSO no ZentyalPHP SSO no Zentyal
PHP SSO no Zentyal
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
O que você precisa saber sobre chatbots
O que você precisa saber sobre chatbotsO que você precisa saber sobre chatbots
O que você precisa saber sobre chatbots
 
WCPOA2019 - WordPress como um backend de seus aplicativos
WCPOA2019  - WordPress como um backend de seus aplicativosWCPOA2019  - WordPress como um backend de seus aplicativos
WCPOA2019 - WordPress como um backend de seus aplicativos
 
WordPress como um backend de seus aplicativos
WordPress como um backend de seus aplicativosWordPress como um backend de seus aplicativos
WordPress como um backend de seus aplicativos
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPress
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
 
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
 
Hangout Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
Hangout  Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...Hangout  Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
Hangout Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
 
Hangout Tempo Real Eventos - Javascript - Os Primeiros Passos
Hangout  Tempo Real Eventos - Javascript - Os Primeiros PassosHangout  Tempo Real Eventos - Javascript - Os Primeiros Passos
Hangout Tempo Real Eventos - Javascript - Os Primeiros Passos
 
Desmistificando o DialogFlow
Desmistificando o DialogFlowDesmistificando o DialogFlow
Desmistificando o DialogFlow
 
ChatOps (ChatBots + DevOps)
ChatOps (ChatBots + DevOps) ChatOps (ChatBots + DevOps)
ChatOps (ChatBots + DevOps)
 
Conexao kinghost - Vendas inteligentes com intelibots
Conexao kinghost - Vendas inteligentes com intelibotsConexao kinghost - Vendas inteligentes com intelibots
Conexao kinghost - Vendas inteligentes com intelibots
 
WoMakersCode 2016 - Shit Happens
WoMakersCode 2016 -  Shit HappensWoMakersCode 2016 -  Shit Happens
WoMakersCode 2016 - Shit Happens
 
Phalcon 2 High Performance APIs - DevWeekPOA 2015
Phalcon 2 High Performance APIs - DevWeekPOA 2015Phalcon 2 High Performance APIs - DevWeekPOA 2015
Phalcon 2 High Performance APIs - DevWeekPOA 2015
 
Dev Heroes
Dev HeroesDev Heroes
Dev Heroes
 
Trilha Android - Android Evolved
Trilha Android - Android EvolvedTrilha Android - Android Evolved
Trilha Android - Android Evolved
 
TDC 2015 - POA - Trilha PHP - Shit Happens
TDC 2015 - POA - Trilha PHP - Shit HappensTDC 2015 - POA - Trilha PHP - Shit Happens
TDC 2015 - POA - Trilha PHP - Shit Happens
 
Material design
Material designMaterial design
Material design
 

Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos

  • 1. Nodejs - Os Primeiros Passos
  • 2. JACKSON FERREIRA DE ANDRADE MAFRA Desenvolvedor há mais de 20 anos com background em projetos de e-commerce e real estate, desde 2009 com interesses focados para o desenvolvimento de interfaces móveis e aplicações MEAP. Me chama lá... http://about.me/jacksonfdam http://linkedin.com/in/jacksonfdam @jacksonfdam
  • 3. O JavaScript, durante muito tempo, não foi uma linguagem respeitada. Era considerada uma linguagem de amadores e, por de fato ser utilizada por muitos programadores inexperientes, gerava códigos mal-escritos. O JS mudou e moldou a web, deu muito mais poder aos desenvolvedores, e se estabeleceu permanentemente como a linguagem de scripts para a web.
  • 4. Hoje, o JavaScript se reinventou mais uma vez, e mais uma vez, está entregando nas mãos dos desenvolvedores o poder de mudar o desenvolvimento. Vamos conhecer como iniciar o caminho a ser percorrido para que você adentre o mundo da plataforma que está disponível em centenas de milhões de aplicações, e, num breve futuro, alcance o grau de profissionalismo para aproveitar grandes oportunidades de mercado.
  • 5. Javascript O mundo do JavaScript tomou outra dimensão a partir do momento que o ecossistema node/npm explodiu. Com ele, tanto a comunidade quanto as empresas, começaram a enxergar o verdadeiro potencial da linguagem.
  • 6. Javascript Com o seu sucesso e crescimento, não demorou para que saísse uma nova versão da especificação ECMAScript que levasse a linguagem para o próximo nível. Foi então que saiu o ES6 (ou ECMAScript 2015, se preferir), trazendo uma série de melhorias significativas.
  • 7. Javascript Para obter conhecimento abrangente ("domínio") de JavaScript, você precisa estar familiarizado com a totalidade das especificações ECMAScript sobre as quais se baseia. JavaScript sua sintaxe, ES2017, melhores práticas, pitfalls, async/promises
  • 8. Javascript ● Classes ● Object Methods ● Getters e Setters ● Dados privados ● Herança ● Parâmetros Padrão ● Um novo for: for.. of ● Declaração de valores, escopo e hoisting ● Uma nova maneira de extrair dados de arrays e objetos ● Trabalhando com Strings ● Template literals ● Multi-line strings ● Funções ● Múltiplos retornos em uma função
  • 9. Javascript O uso de ES6 deixa a sintaxe do JavaScript muito mais elegante e de fácil entendimento fora suas novas funcionalidades que adicionaram mais poder a linguagem. Frameworks novos ou antigos já estão nascendo ou sendo migrados para essa nova sintaxe por isso recomendo fortemente que você tire um tempo para estudar mais sobre ela.
  • 10. Javascript Também podemos transpilar código ES5 para ES6 utilizando o Lebab (sim, Babel ao contrário).
  • 11. Conhecendo o node.js Segundo próprio site: “o node.js é uma plataforma construída sobre o runtime do Chrome, para facilitar a construção de aplicativos escaláveis, usando um modelo baseado em eventos, não bloqueável que o torna leve e eficiente. Ideal para aplicativos com uso intensivo de dados, ou em tempo real capaz de rodar em sistemas diversos”.
  • 12. Conhecendo o node.js Trocando em miúdos: trata-se um conjunto de bibliotecas, desenvolvidas em C++, na forma de um aplicativo que permite a execução de código escrito em javascript na linha de comando da sua máquina.
  • 13. Conhecendo o node.js Runtime do Chrome Para ser simples o node.js baseia-se no V8, uma máquina virtual, em código aberto, que está sendo exaustivamente desenvolvida pelo Google para o Chrome. As ambições do V8 incluem: ser mais rápido, independente da plataforma e mais estável que os engines, e máquinas virtuais, que andam por ai, populando nossos navegadores e permitindo o uso de javascript em páginas HTML.
  • 14. Conhecendo o node.js Não bloqueável A web está evoluindo. Originalmente usávamos a web apenas para consumir conteúdo estático. Fotos de gatos, por exemplo. Hoje usamos para convivência, interação social em sites úteis como o Facebook, onde podemos ver fotos de gatos, publicadas por pessoas que você respeitava, quase em tempo real.
  • 15. Conhecendo o node.js Não bloqueável Queremos o tempo real. Queremos conversar, ler e postar, todo o tempo e o tempo todo. Qualquer um com experiência de desenvolvimento web sabe que as requisições HTTP não foram feitas para este cenário. Na verdade, não foram feitas nem para ver as fotos de gatos. O processo de requisição e resposta utilizado pelo protocolo HTTP é lento, arcaico e baseado em textos.
  • 16. Conhecendo o node.js Não bloqueável Quando usamos uma linguagem de programação como o PHP, ou o Java, sobre um servidor web como o Apache, com ou sem o Tomcat, cada requisição gera um thread que, por sua vez, provoca a alocação de um determinado espaço de memória.
  • 17. Conhecendo o node.js Não bloqueável Digamos, apenas para ilustrar, que sejam 1,5Mbytes por conexão. Se assim for, um servidor com 4 Gbytes, será capaz de suportar alguma coisa próximo a 2600 clientes simultâneos. Parece bom? Não é. E olhe que eu nem estou falando dos ciclos e mais ciclos de cpu que são gastos apenas para ficar mudando de thread. Neste esquema, um aumento na demanda só pode ser atendido com alterações na infraestrutura ou na arquitetura do aplicativo. Em língua de gente: caro, muito caro.
  • 18. Conhecendo o node.js Não bloqueável Na esperança de resolver este problema o node.js adota um único thread, que não pode ser bloqueado por nenhuma requisição de entrada/saída, para tratar todas as requisições que o servidor recebe. A ideia original, o node.js foi criado por Ryan Dahl em 2009, pode ter sido a fomentadora de outras iniciativas na mesma direção: como a tecnologia usada nos servidores web mais modernos como o Nginx e o Thin e em projetos parecidos com o node.js para o Python (Twisted) e para o Ruby (EventMachine). Nada como a cópia e a adoção desenfreada de uma tecnologia para validar sua utilização.
  • 19. Conhecendo o node.js Não bloqueável O conceito por trás do nodel.js é simples: toda e qualquer requisição é tratada pelo sistema servidor em um único thread, sem a alocação de memória extra necessária e sem ciclos de cpu desperdiçados na alternância de threads.
  • 20. Conhecendo o node.js Baseado em eventos Formalmente, pode-se dizer que o node.js usa uma arquitetura baseada em eventos de I/O não-blocante. I/O, ou E/S como se usa em português do Brasil, é um termo que se refere a toda operação, feita entre a CPU e qualquer outro dispositivo, por exemplo o disco. No caso da web, este termo é aplicado a tarefas que serão executadas fora do thread principal, por exemplo consultas a bancos de dados. Então, do ponto de vista do node.js, operação de I/O é qualquer operação que precise ser executada fora do thread principal.
  • 21. Conhecendo o node.js Baseado em eventos O não-blocante indica que nenhuma operação de I/O irá interromper o fluxo do thread principal. Ou seja, todas as requisições serão executadas, e nenhuma delas será capaz de interromper o processamento das outras enquanto termina de enviar dados.
  • 22. Conhecendo o node.js Baseado em eventos O que o node.js faz é criar um laço onde toda e qualquer operação assíncrona de entrada e saída gera um evento. Cada chamada a uma função externa ao thread principal pendura uma função de callback neste laço. Assim que o evento ocorre o callback correspondente é chamado.
  • 23. Conhecendo o node.js Um desenvolvedor que trabalha com Node.js é um back-end ou um front- end? Nós trabalhamos com uma linguagem de programação, que pode ser usada tanto no front, quanto no back e pronto.
  • 24. Conhecendo o node.js A partir de uma ideia tão legal quanto o Node.js, surgiu o io.js. O io.js apareceu em Dezembro de 2014, a partir de um fork do Node feito pelo Fedor Indutny (que pela lista do Node, foi o 112 contribuidor do Node), mas que era um integrante core do time.
  • 25. Conhecendo o node.js A plataforma inteira do Node pode rodar em Linux, OS X ou FreeBSD e até em Windows. Como várias linguagens, o Node também pode ser controlada via linha de comando.
  • 26. Conhecendo o node.js Linux é padrão: é um dos sabores mais conhecidos do mercado. Um pouco de file descriptors, conceitos de daemon, até mesmo saber como visualizar seu processo e os recursos que ele está consumindo (aquele ps basicão, lsof, curl, etc) e entender o Sistema Operacional é sempre bom.
  • 27. Conhecendo o node.js C++ é aquele diferencial, não essencial mas legal. C++ é tipo chocolate: basicão, tá aí desde sempre e quase tudo é feito em cima dele. É bom (não essencial) quando temos uma curiosidade para olhar o código do V8, ver como é feita a libuv, criar uns binds marotos, fazer um dtrace e suas probes, enfim, se der deu.
  • 28. Node.js● HTTP metodos/verbos, status ● Node.js internals (workers, V8, GC, bailout, workers, memória, looping, libuv) ● Processos, threads, testes de integração, unitários ● Performance ● Monitoração ● Logs ● 12 fatores sobre aplicação (https://12factor.net/pt_br/)
  • 29. Node.js ● Npm ● Nodemon ● Forever ● Sequelize ● Express ● Nunjucks
  • 30. Node.js ● Consign: Para realizar autoload de módulos ● Body-parser: Para receber parâmetros de formulários trafegados em requests. ● Express-validator: Para validação de dados ● Express-session: Para criação de variáveis de sessão ● Crypto: Para criptografia de dados utilizando MD5 ● Connect-Multiparty: Para upload de arquivos