SlideShare une entreprise Scribd logo
1  sur  19
9 erros que
desenvolvedores
Node.js cometem
Inclusive eu. :)
Fernando Henriques
● Desenvolvedor 10+ anos
● Senior Full Stack Developer
● JavaScript, Ruby, PHP e Java
● Front-end 💓 3000
github.com/fernandohenriques
● Hot reload
○ Nodemon
○ node-supervisor
○ Forever
1. Não utilizar development tools
Nome da empresa 1
1. Não utilizar development tools
1.2 Automatic browser refresh
○ Três steps:
1) Watch;
2) Enviar mensagem para os clientes conectados;
3) Page reload.
○ Libs úteis
■ watch - to watch for file changes
■ sendevent - server-sent events
■ uglify-js - for minifying the client-side JavaScript files
● Se você não está trabalhando com workers (>12), o
Node.js é single thread (usa um core de CPU)
● Exemplos de como você pode ocupar a sua thread
inteira e, assim, bloquear o evento loop
acidentalmente:
○ Parsear um json gigante com JSON.parse;
○ Imprimir um output muito grande de uma só vez.
2. Bloquear o event loop
● Soluções possíveis:
○ Monitorar o event loop
■ https://www.npmjs.com/package/blocked
○ Entender e respeitar as limitações do Node.js
○ Rodar sua aplicação em mais de um core
○ Estudar worker e worker pool
2. Bloquear o event loop
● Ou: Pense bem antes de usar async/await
3. Mau uso do event loop
● Mesmo código, usando async/await de forma mais
inteligente:
3. Mau uso do event loop
4. Usar let desnecessariamente
5. Callback Hell
5. Callback Hell
● Existem inúmeras libs que podem nos ajudar a logar:
○ Morgan (log de requisições http)
○ Bunyan
○ Winston
○ Bugsnag (serviço pago)
6. Logging pobre
● Escrever testes automatizados com JavaScript e
Node.js não tem custo alto (é fácil começar a testar);
● Existem muitas ferramentas e muito conteúdo na
internet mostrando como testar com Node.js;
○ Exemplo de tutorial “getting started” de como
testar com Node.js: TDD com Node.js + Mocha + Chai
7. Não escrever testes
● Ferramentas de testes mais utilizadas pelo mercado
e pela comunidade open-source:
○ Testing frameworks: Mocha, Jest, Jasmine…
○ E2E testing libraries: Selenium, Cypress,
Puppeteer...
○ Assert libraries: Chai, Expect, Should.js...
○ Factories: Faker.js, Factory Girl...
○ Code coverage: Istanbul
7. Não escrever testes
8. Não usar linter (analisador sintático)
9. Debuggar com console.log
● Uma alternativa: https://www.npmjs.com/package/debug
9. Debuggar com console.log
● Vantagens da lib debug:
○ Reaproveitamento de debug
○ Environment DEBUG ($ export DEBUG=* & node app.js)
○ Controlar o que é debugado através do valor passado em DEBUG
9. Debugar com console.log
Obrigado!
@fernandohenriques

Contenu connexe

Tendances

Tendances (20)

Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
Uaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoUaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - Introdução
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
 
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
APIs na nuvem com Azure e ASP.NET Core - Azure Weekend 2016
 
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIsDevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
 
Desenvolvimento Web multiplataforma com ASP.NET Core 2.2 e Docker - Open Sour...
Desenvolvimento Web multiplataforma com ASP.NET Core 2.2 e Docker - Open Sour...Desenvolvimento Web multiplataforma com ASP.NET Core 2.2 e Docker - Open Sour...
Desenvolvimento Web multiplataforma com ASP.NET Core 2.2 e Docker - Open Sour...
 
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
 
Docker: Introdução e Primeiros Passos - CEUNSP - Outubro-2018
Docker: Introdução e Primeiros Passos - CEUNSP - Outubro-2018Docker: Introdução e Primeiros Passos - CEUNSP - Outubro-2018
Docker: Introdução e Primeiros Passos - CEUNSP - Outubro-2018
 
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
ASP.NET Core e Linux: Explorando novas fronteiras - Araras Dev - Julho/2017
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e Azure
 
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
 
ASP.NET Core em Linux - Canal .NET Dev Week
ASP.NET Core em Linux - Canal .NET Dev WeekASP.NET Core em Linux - Canal .NET Dev Week
ASP.NET Core em Linux - Canal .NET Dev Week
 
ASP.NET Core 2.0 - Pointer - Janeiro-2018
ASP.NET Core 2.0 - Pointer - Janeiro-2018ASP.NET Core 2.0 - Pointer - Janeiro-2018
ASP.NET Core 2.0 - Pointer - Janeiro-2018
 
Canal Coding Night - Sua primeira aplicação com Blazor
Canal Coding Night - Sua primeira aplicação com BlazorCanal Coding Night - Sua primeira aplicação com Blazor
Canal Coding Night - Sua primeira aplicação com Blazor
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
 

Similaire à 9 erros que desenvolvedores Node.js cometem

Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
Giovanni Bassi
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
Adler Medrado
 

Similaire à 9 erros que desenvolvedores Node.js cometem (20)

Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
Ferramentas e bibliotecas que você deveria estar utilizando - Desenvolvimento...
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
 
Node.js for Noobs
Node.js for NoobsNode.js for Noobs
Node.js for Noobs
 
Desenvolvendo com IONIC
Desenvolvendo com IONICDesenvolvendo com IONIC
Desenvolvendo com IONIC
 
BDD em Ação
BDD em AçãoBDD em Ação
BDD em Ação
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Node js
Node jsNode js
Node js
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 

Plus de Fernando Henriques

Plus de Fernando Henriques (7)

A importância de padronizar nosso CSS
A importância de padronizar nosso CSSA importância de padronizar nosso CSS
A importância de padronizar nosso CSS
 
Como Rails e DHH revolucionaram a engenharia de software
Como Rails e DHH revolucionaram a engenharia de software Como Rails e DHH revolucionaram a engenharia de software
Como Rails e DHH revolucionaram a engenharia de software
 
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: React
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: React
 
Introdução ao GraphQL - Uma nova forma de criar APIs
Introdução ao GraphQL - Uma nova forma de criar APIsIntrodução ao GraphQL - Uma nova forma de criar APIs
Introdução ao GraphQL - Uma nova forma de criar APIs
 
Rails admin : Como criar um painel administrativo na velocidade da luz
Rails admin : Como criar um painel administrativo na velocidade da luzRails admin : Como criar um painel administrativo na velocidade da luz
Rails admin : Como criar um painel administrativo na velocidade da luz
 

Dernier

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Dernier (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

9 erros que desenvolvedores Node.js cometem

  • 1. 9 erros que desenvolvedores Node.js cometem Inclusive eu. :)
  • 2. Fernando Henriques ● Desenvolvedor 10+ anos ● Senior Full Stack Developer ● JavaScript, Ruby, PHP e Java ● Front-end 💓 3000 github.com/fernandohenriques
  • 3. ● Hot reload ○ Nodemon ○ node-supervisor ○ Forever 1. Não utilizar development tools
  • 4. Nome da empresa 1 1. Não utilizar development tools 1.2 Automatic browser refresh ○ Três steps: 1) Watch; 2) Enviar mensagem para os clientes conectados; 3) Page reload. ○ Libs úteis ■ watch - to watch for file changes ■ sendevent - server-sent events ■ uglify-js - for minifying the client-side JavaScript files
  • 5. ● Se você não está trabalhando com workers (>12), o Node.js é single thread (usa um core de CPU) ● Exemplos de como você pode ocupar a sua thread inteira e, assim, bloquear o evento loop acidentalmente: ○ Parsear um json gigante com JSON.parse; ○ Imprimir um output muito grande de uma só vez. 2. Bloquear o event loop
  • 6. ● Soluções possíveis: ○ Monitorar o event loop ■ https://www.npmjs.com/package/blocked ○ Entender e respeitar as limitações do Node.js ○ Rodar sua aplicação em mais de um core ○ Estudar worker e worker pool 2. Bloquear o event loop
  • 7. ● Ou: Pense bem antes de usar async/await 3. Mau uso do event loop
  • 8. ● Mesmo código, usando async/await de forma mais inteligente: 3. Mau uso do event loop
  • 9. 4. Usar let desnecessariamente
  • 12. ● Existem inúmeras libs que podem nos ajudar a logar: ○ Morgan (log de requisições http) ○ Bunyan ○ Winston ○ Bugsnag (serviço pago) 6. Logging pobre
  • 13. ● Escrever testes automatizados com JavaScript e Node.js não tem custo alto (é fácil começar a testar); ● Existem muitas ferramentas e muito conteúdo na internet mostrando como testar com Node.js; ○ Exemplo de tutorial “getting started” de como testar com Node.js: TDD com Node.js + Mocha + Chai 7. Não escrever testes
  • 14. ● Ferramentas de testes mais utilizadas pelo mercado e pela comunidade open-source: ○ Testing frameworks: Mocha, Jest, Jasmine… ○ E2E testing libraries: Selenium, Cypress, Puppeteer... ○ Assert libraries: Chai, Expect, Should.js... ○ Factories: Faker.js, Factory Girl... ○ Code coverage: Istanbul 7. Não escrever testes
  • 15. 8. Não usar linter (analisador sintático)
  • 16. 9. Debuggar com console.log
  • 17. ● Uma alternativa: https://www.npmjs.com/package/debug 9. Debuggar com console.log
  • 18. ● Vantagens da lib debug: ○ Reaproveitamento de debug ○ Environment DEBUG ($ export DEBUG=* & node app.js) ○ Controlar o que é debugado através do valor passado em DEBUG 9. Debugar com console.log