node.js - #1 - introdução - rodrigo branas
TRANSCRIPT
![Page 1: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/1.jpg)
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br
![Page 2: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/3.jpg)
Tudo começou com Ryan Dahl
![Page 4: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/4.jpg)
![Page 5: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/5.jpg)
A forma como a maior parte das plataformas lida com I/O está errada
![Page 6: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/6.jpg)
![Page 7: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/7.jpg)
As threads acabam passando a maior parte do seu tempo dormindo...
![Page 8: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/8.jpg)
Isso acaba alocando recursos, como memória, desnecessariamente
![Page 9: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/9.jpg)
Será que é possível fazer a mesma coisa de um jeito mais eficiente?
![Page 10: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/10.jpg)
![Page 11: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/11.jpg)
![Page 12: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/12.jpg)
![Page 13: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/13.jpg)
O Node.js processa tudo em uma única thread, utilizando um event loop
![Page 14: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/14.jpg)
Hands-On: Single Thread primes-single-thread.js
![Page 15: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/15.jpg)
Dessa forma, como é possível escalar e atender vários clientes ao mesmo tempo?
![Page 16: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/16.jpg)
Na verdade, existe um thread pool responsável pelo processamento de I/O
![Page 17: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/17.jpg)
Hands-On: Thread Pool files.js
![Page 18: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/18.jpg)
Hands-On: Multi Thread primes-multi-thread.js
![Page 19: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/19.jpg)
![Page 20: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/21.jpg)
![Page 22: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/22.jpg)
Qual linguagem oferece um bom suporte ao desenvolvimento assíncrono?
![Page 23: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/23.jpg)
C podia ser mais atraente...
![Page 24: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/24.jpg)
Ele avaliou ainda Lua e Haskell
![Page 25: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/25.jpg)
JavaScript é perfeito, tem uma sintaxe amigável e tudo gira em torno de funções
![Page 26: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/26.jpg)
Os navegadores já utilizam de forma assíncrona, baseado em um event loop
![Page 27: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/27.jpg)
![Page 28: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/29.jpg)
Será que o Node.js é rápido mesmo?
![Page 30: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/30.jpg)
Hands-On: Performance primes.js vs Primes.java
![Page 31: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/31.jpg)
![Page 32: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/32.jpg)
![Page 33: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/33.jpg)
![Page 34: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/34.jpg)
![Page 35: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/35.jpg)
![Page 36: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/38.jpg)
![Page 39: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/39.jpg)
![Page 40: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/42.jpg)
Quem está utilizando Node.js?
![Page 43: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/43.jpg)
![Page 44: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/44.jpg)
Quer começar a utilizar Node.js?
![Page 45: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/45.jpg)
![Page 46: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/46.jpg)
node --version
![Page 47: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/47.jpg)
REPL ou Read-Eval-Print-Loop
![Page 48: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/48.jpg)
node helloWorld.js
![Page 49: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/49.jpg)
O Node.js suporta ES6?
![Page 50: Node.js - #1 - Introdução - Rodrigo Branas](https://reader034.vdocuments.site/reader034/viewer/2022051503/587a65641a28ab8a2a8b52f5/html5/thumbnails/50.jpg)
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