Luciano Ramalho luciano@ramalho.org Node.js: JavaScript com Google V8 no servidor
Luciano Ramalho Programando por prazer desde 1978, profissionalmente desde 1982 Arquiteto de soluções Web desde 1994 1º diretor técnico do Brasil Online, na Abril S/A Muitos clientes e alguns empregos desde então, quase sempre atuando na Web (server-side) Agora: Oficinas Turing e Academia Python na Globalcode
Demonstração bandeiras.js etc.* * http://github.com/oturing/nodejs
Node.js... É um ambiente de execução para usar JavaScript fora do navegador linha de comando + console interativo Incorpora o engine de JavaScript Google V8 aquele do Google Chrome, ECMAScript 5 Inclui bibliotecas para fazer programação de I/O orientada a eventos (modo assíncrono)
Arquitetura
Demonstração console interativo
Node.js: console (REPL) > function agora() {... var dt = Date().slice(16,24);... console.log(dt);... } undefined > agora(); 13:50:17 undefined >
Programação assíncrona?
O restaurante síncrono
O restaurante síncrono
O restaurante síncrono
O restaurante síncrono
O restaurante síncrono
O restaurante síncrono
O restaurante síncrono
O restaurante assíncrono
O restaurante assíncrono
O restaurante assíncrono
O restaurante assíncrono
O restaurante assíncrono
O restaurante assíncrono
O restaurante assíncrono
Programação assíncrona =callback
Demonstração hora*.js, sigint*.js, stat*.js * http://github.com/oturing/nodejs
hora.js Com isso o shell do *nix consegue executar o script O 2º console.log acontece antes do primeiro * http://github.com/oturing/nodejs
hora2.js Tempos diferentes * http://github.com/oturing/nodejs
hora3.js Cada chamada dispara a próxima, com atraso aleatório Iniciar * http://github.com/oturing/nodejs
statsync.js Importação de módulos Common.js Invoca a função statsync do módulo fs. Saída padrão: stdout * http://github.com/oturing/nodejs
stat.js: chamada assíncrona Callback: esta função é invocada quando o SO responde o stat, milhões de ciclos depois * http://github.com/oturing/nodejs
sigint.js Callback: invocada quando o operador tecla ˆC * http://github.com/oturing/nodejs
sigint2.js O primeiro callback associa um segundo callback ao mesmo evento * http://github.com/oturing/nodejs
sigint3.js O que faz esta chamada?
sigint3.js Ela constrói e retorna uma função sob medida
sigint3.js Variável livre: não é definida no escopo desta função
sigint3.js Closure é um puxadinho do escopo da função
E o que eu ganho com todo este trabalho?
Acessar o cache L1 é......como pegar um papel sobre a sua mesa Analogia do Ryan Dahl
Acessar o cache L2 é......como pegar um papel em uma gaveta
Acessar a RAM é......como pegar um papel em um armário
Acessar a rede é...
Acessar a rede é...
Acessar a rede é...
Acessar a rede é......como ir buscar um papel no Japão
Tempos de acesso ciclos de CPU cache L1 3 cache L2 14 RAM 250 Dados aproximados citados por Ryan Dahl* disco 41.000.00 rede 240.000.000 * http://www.youtube.com/watch?v=m-sc73y-zqa
Decifrando o hello world
Decifrando o hello world
Decifrando o hello world
Eco-sistema Produto experimental, APIs mudando (v. 0.6.x) Framework Web: Express, comparável a Flask (Python) ou Sinatra (Ruby) nada tão completo quanto Django ou Rails Centenas de bibliotecas de terceiros, livres* Hospedagem especializada gerenciados: Joyent, Heroku, Nodegrid; VPS etc. * https://github.com/joyent/node/wiki/modules
Cocktails Mojito Manhattan outros drinks...?
Evitando o pior do JS use strict sempre, sem medo de ser feliz CoffeScript, Clojure etc. no server-side, ninguém liga se você usar outra linguagem, desde que ela gere código JavaScript ECMAScript 5 no server-side o ambiente é controlado: o único engine que te interessa é o V8
Luciano Ramalho luciano@ramalho.org @ramalhoorg oficina online: JavaScript moderno com Node.js e testes automatizados * http://pre-node.turing.com.br