31
Nodejs - Os Primeiros Passos

Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos

Embed Size (px)

Citation preview

Page 1: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

Nodejs - Os Primeiros Passos

Page 2: Hangout  Tempo Real Eventos - 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

Page 3: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 4: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 5: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 6: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 7: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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

Page 8: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

Javascript● Classes

● Object Methods

● Getters e Setters

● Dados privados

● Herança

● Parâmetros Padrão

● Um novo for: for.. of

● Rest operator

● 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

Page 9: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 10: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

Javascript

Também podemos transpilar código ES5 para ES6 utilizando o Lebab (sim,

Babel ao contrário).

Page 11: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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”.

Page 12: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 13: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 14: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 15: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 16: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 17: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 18: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

Conhecendo o node.jsNã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.

Page 19: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 20: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 21: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 22: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 23: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 24: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 25: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 26: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 27: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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.

Page 28: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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/)

● Linux e C++

Page 29: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

Node.js

● Npm

● Nodemon

● Forever

● Sequelize

● Express

● Nunjucks

Page 30: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

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

Page 31: Hangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos

Perguntas?