SlideShare uma empresa Scribd logo
1 de 52
Luciano Ramalho
                                       luciano@ramalho.org
                                                   @luciano




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
                                                @luciano
Demonstração
        bandeiras.js etc.*



* http://github.com/oturing/nodejs

                                     @luciano
@luciano
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)

                                                @luciano
Arquitetura




              @luciano
Demonstração
  console interativo




                       @luciano
Node.js: console (REPL)

         > function agora() {
         ...   var dt = Date().slice(16,24);
         ...   console.log(dt);
         ... }
         undefined
         > agora();
         13:50:17
         undefined
         >



                                     @luciano
Programação
 assíncrona?



               @luciano
O restaurante síncrono




                         @luciano
O restaurante síncrono




                         @luciano
O restaurante síncrono




                         @luciano
O restaurante síncrono




                         @luciano
O restaurante síncrono




                         @luciano
O restaurante síncrono




                         @luciano
O restaurante síncrono




                         @luciano
O restaurante assíncrono




                       @luciano
O restaurante assíncrono




                       @luciano
O restaurante assíncrono




                       @luciano
O restaurante assíncrono




                       @luciano
O restaurante assíncrono




                       @luciano
O restaurante assíncrono




                       @luciano
O restaurante assíncrono




                       @luciano
Programação assíncrona



        = callback
                         @luciano
Demonstração
    hora*.js, sigint*.js, stat*.js



* http://github.com/oturing/nodejs

                                     @luciano
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
                                             @luciano
hora2.js




 Tempos
diferentes

             * http://github.com/oturing/nodejs
                                            @luciano
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
                                                  @luciano
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
                                                  @luciano
sigint.js




   Callback: invocada quando o operador tecla ˆC

                * http://github.com/oturing/nodejs
                                               @luciano
sigint2.js


                                      O primeiro
                                    callback associa
                                      um segundo
                                      callback ao
                                    mesmo evento


             * http://github.com/oturing/nodejs
                                            @luciano
sigint3.js




             O que faz esta
               chamada?

                      @luciano
sigint3.js
             Ela constrói e
              retorna uma
               função sob
                 medida




                      @luciano
sigint3.js
             Variável livre:
             não é definida
               no escopo
              desta função




                      @luciano
sigint3.js
             Closure é um
              puxadinho
              do escopo
              da função




                    @luciano
E o que eu ganho com
 todo este trabalho?



                       @luciano
Acessar o cache L1 é...




   ...como pegar um papel sobre a sua mesa

                   Analogia do Ryan Dahl     @luciano
Acessar o cache L2 é...




   ...como pegar um papel em uma gaveta

                                          @luciano
Acessar a RAM é...




   ...como pegar um papel em um armário

                                          @luciano
Acessar a rede é...




                      @luciano
Acessar a rede é...




                      @luciano
Acessar a rede é...




                      @luciano
Acessar a rede é...




    ...como ir buscar um papel no Japão

                                          @luciano
Tempos de acesso
                    ciclos de CPU
                                         Dados
         cache L1               3
                                     aproximados
         cache L2              14     citados por
            RAM               250     Ryan Dahl*

            disco        41.000.00
            rede       240.000.000



* http://www.youtube.com/watch?v=M-sc73Y-zQA
                                           @luciano
Decifrando o hello world




                       @luciano
Decifrando o hello world




                       @luciano
Decifrando o hello world




                       @luciano
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
                                               @luciano
Cocktails

• Mojito
• Manhattan
• outros
  drinks...?



               @luciano
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
Luciano Ramalho
                                 luciano@ramalho.org
                                             @luciano




oficina online:
JavaScript moderno
com Node.js e testes automatizados
        * http://pre-node.turing.com.br

Mais conteúdo relacionado

Mais de Luciano Ramalho

Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoLuciano Ramalho
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonLuciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Luciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaqueLuciano Ramalho
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsLuciano Ramalho
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)Luciano Ramalho
 
JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)Luciano Ramalho
 

Mais de Luciano Ramalho (20)

Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
 
Dojo com Processing
Dojo com ProcessingDojo com Processing
Dojo com Processing
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaque
 
Modelos ricos
Modelos ricosModelos ricos
Modelos ricos
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Ensinando OO com Python
Ensinando OO com PythonEnsinando OO com Python
Ensinando OO com Python
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design Patterns
 
Dspace em 5 minutos
Dspace em 5 minutosDspace em 5 minutos
Dspace em 5 minutos
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
 
JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)
 
Wiki sa-v2
Wiki sa-v2Wiki sa-v2
Wiki sa-v2
 

Node.JS: JavaScript no servidor com Google V8

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n