Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos

Preview:

Citation preview

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

● 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

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

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

● Linux e C++

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?