Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Funcionamento interno do Node.js e boas práticas

Funcionamento interno do Node.js e boas práticas

Apresentação feita na Concrete Solutions-sp para o capítulo de Javascript.
O conteúdo apresentado foi o que tem dentro do nodejs explicando os conceitos base, libuv e o que é o evento loop, v8 com Shadow Class e com ele compila seu código. Além de apresentar dois módulos interessantes do nodejs Cluster e Child Processes

Kirmayr Tomaz

March 16, 2017
Tweet

More Decks by Kirmayr Tomaz

Other Decks in Technology

Transcript

  1. Kirmayr Tomaz • Organizador do Femug-AM • Bacharel em Sistemas

    de Informação - UFAM • Trabalho na Concrete Solutions @kirmayrtomaz [email protected] Sobre
  2. Node.js Terminologia • Single Thread • Paralelismo e concorrência •

    Síncrono e assíncrono • I/O não bloqueante • Orientada a Eventos
  3. Estrutura do Node.js Dependências Internas • Libuv • V8 •

    C-iris • Crypto • HTTP-parse • Zlib • OpenSSL Ferramentas • npm • gyp • gtest
  4. Bibliotecas internas • C-iris - Algumas solicitações assíncronas do DNS

    • HTTP-parse - Parse da requisição HTTP • Zlib - Biblioteca de compressão • OpenSSL - Utilizado extensivamente pelo módulo tls e crypto, fornecendo muitas funções de criptografia
  5. Libuv • Event loop • TCP e UDP socket assíncrono

    • DNS assíncrono • Assíncrono arquivos e operações de arquivos • Eventos de arquivos • Thread pool • Internal Process Comunication (IPC) compartilhado entre os sockets • Child processes
  6. Task Queue • Event Loop • Task Queue - Local

    onde os callbacks ficam aguardando serem chamados • Background Thread (Pull Thread)
  7. Task Queue • Macro Task - São processadas pelo event

    loop • Micro Task - são programadas para executar após o script de execução
  8. CallStack Background Thread Task Queue / MacroTask MicroTask Event Loop

    setTimeout Promise then Promise then Promise then
  9. V8

  10. V8 • Projeto Open source desenvolvida pela Google, para interpretar

    código javascript super performático, escrito em C++ utilizado pelo google Chrome, nodejs e afins.
  11. V8 • O javascript possui pouca informação de qual é

    o tipos da sua aplicação, seus tipos podem mudar no tempo de execução • Sendo uma das principais vantagens do javascript é um dos principais motivos que a linguagem nunca será mais rápida que as fortemente tipadas
  12. V8 - Classes Ocultas • Uma das formas para minimizar

    esse problema é utilizando as classes ocultas
  13. Person Object Initial Hidden Class PB Initial Hidden Class PC

    Initial Hidden Class PA Initial Hidden Class P0
  14. • Inicialize todos os seus atributos em uma função construtora,

    mesmo aqueles que serão utilizados no futuro em condições específicas. • Inicialize todos seus atributos sempre na mesma ordem, evitando condicionais e loopings nesse momento. • Não delete atributos de seus objetos.
  15. Números O v8 demarca o valor correspondente ao que foi

    obtido • Dê preferência para números menores que 32 bits, tornando acesso mais rapido e simples
  16. Arrays • Use índices numéricos contínuo a partir de 0.

    • Não pré-aloque arrays muito grandes com mais de 64 mil itens. • Não delete items da array diretamente, use Array.splice quando preciso. • Não tente acessar índices não iniciados ou deletados do array.
  17. Child Process • Pode ajudar externalizar o uso intensivo de

    CPU da sua single Thread do node • Deixa o event Loop do processo pai mais limpo • Cria um processo filho, ouve e controla • Exec() e Spawn() ◦ Exec executa em buffer ◦ Spawn cria um novo processo e retorna uma interface de stream pelo I/O
  18. • Uma única instância do node é executada numa single

    Thread • Uma das vantagens de ter um processador de múltiplos núcleos é que às vezes ele pode ser executado em clusters • O Node.js se encarrega de executar e balancear a carga para cada processo Cluster
  19. Cluster • O módulo de Cluster tem suporte a dois

    métodos de execução • O primeiro(Default para todas as plataformas exceto o windows) ,o processo Master escuta a porta, aceita novas conexões e distribui entre os processos avaliando pelo round-robin • Na segunda Abordagem, o master cria um canal socket e envia para o processo que quiser executar naquele momento.
  20. Referências Estrutura interna Node.js - https://nodejs.org/en/docs/meta/topics/dependencies/ Libuv http://docs.libuv.org/en/v1.x/design.html Event Loop

    - http://latentflip.com/loupe/ - https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/ - https://blog.risingstack.com/node-js-at-scale-understanding-node-js-event-loop/ - https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ - http://walde.co/2016/11/27/node-js-o-que-e-esse-event-loop-afinal/ - https://www.youtube.com/watch?v=8aGhZQkoFbQ - https://www.youtube.com/watch?v=va8-xdxTywU
  21. Referências V8 - https://www.html5rocks.com/en/tutorials/speed/v8/ - http://developers.scup.com/otimizando-seu-javascript-no-v8-node-js/ - https://github.com/v8/v8/wiki/Design%20Elements - https://www.youtube.com/watch?v=UJPdhx5zTaw

    Child Process - https://nodejs.org/api/child_process.html Cluster - https://nodejs.org/api/cluster.html - http://rowanmanning.com/posts/node-cluster-and-express/
  22. www.concretesolutions.com.br Rio de Janeiro – Rua São José, 90 –

    cj. 2121 Centro – (21) 2240-2030 São Paulo - Av. Nações Unidas, 11.541 3º andar - Brooklin - (11) 4119-0449 Ajudamos empresas a criar produtos digitais de sucesso