node.js - #1 - introdução - rodrigo branas

50
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br

Upload: rodrigo-branas

Post on 15-Apr-2017

1.362 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: Node.js - #1 - Introdução - Rodrigo Branas

Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br

Page 2: Node.js - #1 - Introdução - Rodrigo Branas

O Node.js não nasceu com a intenção de levar o JavaScript para o servidor

Page 3: Node.js - #1 - Introdução - Rodrigo Branas

Tudo começou com Ryan Dahl

Page 4: Node.js - #1 - Introdução - Rodrigo Branas
Page 5: Node.js - #1 - Introdução - Rodrigo Branas

A forma como a maior parte das plataformas lida com I/O está errada

Page 6: Node.js - #1 - Introdução - Rodrigo Branas
Page 7: Node.js - #1 - Introdução - Rodrigo Branas

As threads acabam passando a maior parte do seu tempo dormindo...

Page 8: Node.js - #1 - Introdução - Rodrigo Branas

Isso acaba alocando recursos, como memória, desnecessariamente

Page 9: Node.js - #1 - Introdução - Rodrigo Branas

Será que é possível fazer a mesma coisa de um jeito mais eficiente?

Page 10: Node.js - #1 - Introdução - Rodrigo Branas
Page 11: Node.js - #1 - Introdução - Rodrigo Branas
Page 12: Node.js - #1 - Introdução - Rodrigo Branas
Page 13: Node.js - #1 - Introdução - Rodrigo Branas

O Node.js processa tudo em uma única thread, utilizando um event loop

Page 14: Node.js - #1 - Introdução - Rodrigo Branas

Hands-On: Single Thread primes-single-thread.js

Page 15: Node.js - #1 - Introdução - Rodrigo Branas

Dessa forma, como é possível escalar e atender vários clientes ao mesmo tempo?

Page 16: Node.js - #1 - Introdução - Rodrigo Branas

Na verdade, existe um thread pool responsável pelo processamento de I/O

Page 17: Node.js - #1 - Introdução - Rodrigo Branas

Hands-On: Thread Pool files.js

Page 18: Node.js - #1 - Introdução - Rodrigo Branas

Hands-On: Multi Thread primes-multi-thread.js

Page 19: Node.js - #1 - Introdução - Rodrigo Branas
Page 20: Node.js - #1 - Introdução - Rodrigo Branas

A libuv é uma biblioteca multi-plataforma responsável pela realização de I/O assíncrono,

fornecendo a implementação do event loop e do thread pool, juntamente com o suporte a TCP e

UDP socket, resolução de DNS, sistema de arquivos, processos entre outras.

Page 21: Node.js - #1 - Introdução - Rodrigo Branas
Page 22: Node.js - #1 - Introdução - Rodrigo Branas

Qual linguagem oferece um bom suporte ao desenvolvimento assíncrono?

Page 23: Node.js - #1 - Introdução - Rodrigo Branas

C podia ser mais atraente...

Page 24: Node.js - #1 - Introdução - Rodrigo Branas

Ele avaliou ainda Lua e Haskell

Page 25: Node.js - #1 - Introdução - Rodrigo Branas

JavaScript é perfeito, tem uma sintaxe amigável e tudo gira em torno de funções

Page 26: Node.js - #1 - Introdução - Rodrigo Branas

Os navegadores já utilizam de forma assíncrona, baseado em um event loop

Page 27: Node.js - #1 - Introdução - Rodrigo Branas
Page 28: Node.js - #1 - Introdução - Rodrigo Branas

O V8 é um interpretador de JavaScript de alta performance desenvolvido pelo Google. Ele tem o código aberto e foi desenvolvido em C++ com o

objetivo de atender ao navegador Chrome.

Page 29: Node.js - #1 - Introdução - Rodrigo Branas

Será que o Node.js é rápido mesmo?

Page 30: Node.js - #1 - Introdução - Rodrigo Branas

Hands-On: Performance primes.js vs Primes.java

Page 31: Node.js - #1 - Introdução - Rodrigo Branas
Page 32: Node.js - #1 - Introdução - Rodrigo Branas
Page 33: Node.js - #1 - Introdução - Rodrigo Branas
Page 34: Node.js - #1 - Introdução - Rodrigo Branas
Page 35: Node.js - #1 - Introdução - Rodrigo Branas
Page 36: Node.js - #1 - Introdução - Rodrigo Branas

O Node.js uma plataforma de código aberto para a execução de JavaScript no servidor. É composto pela junção do interpretador V8, do Google, com a biblioteca libuv e por um conjunto de módulos.

Page 37: Node.js - #1 - Introdução - Rodrigo Branas

Node.js  Bindings  (C++)

Node.js  Code  Library  (JavaScript)

http fs stream buffer net

crypto zlib cluster dns ...

+

Page 38: Node.js - #1 - Introdução - Rodrigo Branas
Page 39: Node.js - #1 - Introdução - Rodrigo Branas
Page 40: Node.js - #1 - Introdução - Rodrigo Branas

A comunidade, insatisfeita com a Joyent, fez um fork do Node.js criando o io.js

Page 41: Node.js - #1 - Introdução - Rodrigo Branas

Em 09/2015, com a saída da Joyent, io.js v3.3 se juntou com o Node.js v0.12,

dando origem ao Node.js v4.0

Page 42: Node.js - #1 - Introdução - Rodrigo Branas

Quem está utilizando Node.js?

Page 43: Node.js - #1 - Introdução - Rodrigo Branas
Page 44: Node.js - #1 - Introdução - Rodrigo Branas

Quer começar a utilizar Node.js?

Page 45: Node.js - #1 - Introdução - Rodrigo Branas
Page 46: Node.js - #1 - Introdução - Rodrigo Branas

node --version

Page 47: Node.js - #1 - Introdução - Rodrigo Branas

REPL ou Read-Eval-Print-Loop

Page 48: Node.js - #1 - Introdução - Rodrigo Branas

node helloWorld.js

Page 49: Node.js - #1 - Introdução - Rodrigo Branas

O Node.js suporta ES6?

Page 50: Node.js - #1 - Introdução - Rodrigo Branas

Rodrigo Branas  Agile Code: http://www.agilecode.com.br Twitter: @rodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas