O documento fornece uma introdução ao Node.js, cobrindo seus principais conceitos como:
1) Node.js é uma plataforma baseada no runtime do Chrome que permite desenvolvimento de aplicações escaláveis usando modelo não bloqueante de eventos;
2) Ele usa um único thread para tratar requisições de forma não bloqueante, evitando problemas de escalabilidade de modelos com múltiplas threads;
3) Node.js é ideal para aplicações com uso intensivo de dados ou em tempo real e roda em diversos sistemas operacionais incluindo Linux, OSX
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.
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.
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