{"id":8292,"date":"2024-10-29T10:24:36","date_gmt":"2024-10-29T13:24:36","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=8292"},"modified":"2024-10-29T11:46:41","modified_gmt":"2024-10-29T14:46:41","slug":"por-que-usar-node-js-uma-justificativa-passo-a-passo","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/","title":{"rendered":"Por que diabos usar o Node.js? Uma justificativa passo a passo"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">A crescente popularidade do <a href=\"https:\/\/geekblogti.wpengine.com\/linguagem-javascript-um-guia-para-iniciantes\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"JavaScript (abre numa nova aba)\"><strong>JavaScript<\/strong><\/a> trouxe muitas mudan\u00e7as, e a face do desenvolvimento da web hoje \u00e9 drasticamente diferente.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Hoje em dia \u00e9 dif\u00edcil imaginar o que podemos fazer na <strong>Web<\/strong> com o JavaScript em execu\u00e7\u00e3o no servidor e no navegador.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">H\u00e1 apenas alguns anos, ou foram encapsulados em ambientes de \u00e1rea restrita, como <strong>Flash<\/strong> ou<strong> Java Applets<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Antes de se aprofundar nas\u00a0solu\u00e7\u00f5es <strong>Node.js<\/strong>, voc\u00ea pode ler sobre os benef\u00edcios do uso de\u00a0JavaScript, que unifica o idioma e o formato de dados (<strong><a href=\"https:\/\/geekblogti.wpengine.com\/xml-vs-json-entenda-como-fazer-a-melhor-escolha\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"JSON (abre numa nova aba)\">JSON<\/a><\/strong>), permitindo reutilizar da melhor maneira os recursos do desenvolvedor.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como esse \u00e9 mais um benef\u00edcio do JavaScript do que o<strong> Node.js <\/strong>especificamente, n\u00e3o discutiremos muito aqui.\u00a0Mas \u00e9 uma vantagem importante incorporar o Node.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p><strong><a href=\"https:\/\/www.geekhunter.com/pt/blog\/update-node-js-tutorial-facil-rapido\/\">Update Node JS<\/a><\/strong>: um tutorial f\u00e1cil e r\u00e1pido!<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-afinal-o-que-node-js\">Afinal, o que \u00e9 Node.Js?<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" class=\"wp-image-8426\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/Afinal-o-que-\u00e9-Node.Js-1024x576.jpg\" alt=\"O que \u00e9 node js \" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como declara a Wikipedia:<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p><em>O Node.js. \u00e9 uma compila\u00e7\u00e3o empacotada do mecanismo JavaScript V8 do Google, a camada de abstra\u00e7\u00e3o da plataforma libuv e uma biblioteca principal, que \u00e9 basicamente escrita em JavaScript<\/em>.<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Po, ent\u00e3o quer dizer que<strong> Node<\/strong> nada mais \u00e9 que o javascript nutella? Calma jovem <em>padau\u00e3<\/em>, n\u00e3o \u00e9 bem assim.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vale a pena notar que Ryan Dahl, o criador do Node.js, pretendia criar\u00a0<strong>sites em tempo real com capacidade de envio<\/strong>\u00a0<em>&#8220;inspirados em aplicativos como o Gmail&#8221;.<\/em>\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No Node.js, ele deu aos desenvolvedores uma ferramenta para trabalhar no paradigma de E\/S sem bloqueio e orientado a eventos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ap\u00f3s mais de 20 anos de web sem estado com base no paradigma de <em>solicita\u00e7\u00e3o-resposta<\/em>, finalmente temos aplicativos da web com <strong>conex\u00f5es bidirecionais em tempo real<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ok, ok, j\u00e1 entendi que o node veio de <em>Asgard<\/em> e funciona como o <em>Tesseract<\/em>, uma joia do infinito.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em uma frase: <em>o Node.js brilha em aplicativos da web em tempo real, empregando a tecnologia push nos soquetes da web.\u00a0O que h\u00e1 de t\u00e3o revolucion\u00e1rio nisso?<\/em>\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bem, ap\u00f3s mais de 20 anos de web com base no paradigma de resposta a pedidos <em>sem estado<\/em>, finalmente temos aplicativos da web com conex\u00f5es bidirecionais em tempo real, onde o<strong> cliente e o servidor podem iniciar a comunica\u00e7\u00e3o<\/strong>, permitindo que eles troquem dados livremente (<em>chupa javascript!<\/em>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso contrasta fortemente com o paradigma t\u00edpico de resposta da Web, onde o cliente sempre inicia a comunica\u00e7\u00e3o.\u00a0Al\u00e9m disso, tudo \u00e9 baseado na Web aberta (<strong>HTML, CSS e JS<\/strong>) executada na porta 80 padr\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pode-se argumentar que temos isso h\u00e1 anos na forma de <strong>Flash<\/strong> e<strong> Java Applets<\/strong> \u2014 mas, na realidade, esses eram <strong>apenas ambientes de \u00e1rea restrita<\/strong> usando a Web como um protocolo de transporte a ser entregue ao cliente.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Al\u00e9m disso, eles eram <strong>executados isoladamente<\/strong> e frequentemente operados em portas n\u00e3o padr\u00e3o, o que pode exigir permiss\u00f5es extras e outras coisas e <em>bl\u00e1,bl\u00e1,bl\u00e1<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com todas as suas vantagens, o<strong> Node.js<\/strong> agora desempenha um papel cr\u00edtico na tecnologia de muitas empresas de alto n\u00edvel, que dependem de seus benef\u00edcios exclusivos.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A <strong>Funda\u00e7\u00e3o Node.js <\/strong>consolidou todo o melhor pensamento sobre por que as empresas devem considerar o <strong>Node.js<\/strong> em uma breve apresenta\u00e7\u00e3o que pode ser encontrada na<strong>\u00a0<\/strong><a href=\"https:\/\/foundation.nodejs.org\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (abre numa nova aba)\"><strong>p\u00e1gina de Estudos de Caso da Funda\u00e7\u00e3o Node.js<\/strong>.<\/a><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Neste guia do <strong>Node.js<\/strong>, discutirei n\u00e3o apenas como essas vantagens s\u00e3o alcan\u00e7adas, mas tamb\u00e9m por que voc\u00ea pode querer usar o Node.js. \u2014 e\u00a0<em>por que n\u00e3o<\/em> \u2014 usando alguns dos modelos cl\u00e1ssicos de aplicativos da Web como exemplos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso tenha ficado alguma d\u00favida, esse v\u00eddeo \u00e9 muito did\u00e1tico!<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\">\r\n<div class=\"wp-block-embed__wrapper\">https:\/\/www.youtube.com\/watch?v=vYekSMBCCiM<\/div>\r\n<\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o chega dessas <em>xurumelas<\/em> e<em> simbora <\/em>pro que interessa, <em>man<\/em>!<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-ok-mas-como-o-node-js-funciona\">Ok, mas como o Node.js funciona?<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-8427\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-1024x576.jpg\" alt=\"como funciona o node js\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-1024x576.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-150x84.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-100x56.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-600x337.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-450x253.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-960x540.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-300x169.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona-768x432.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Ok-mas-como-o-Node.js-funciona.jpg 1366w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A principal ideia do <strong>Node.js<\/strong> \u00e9: Usar <strong>E\/S orientada a eventos<\/strong> e sem bloqueio para permanecer leve e eficiente, em face de aplicativos em tempo real, com uso intenso de dados que s\u00e3o executados em dispositivos distribu\u00eddos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">N\u00e3o esque\u00e7a isso, mizera! Quando perguntarem pra voc\u00ea: &#8220;<em>ah, mas por qu\u00ea o node \u00e9 t\u00e3o bom assim<\/em>? <em>Nem tava na guerra infinita?<\/em>&#8221; Voc\u00ea vai ter a resposta mais linda na ponta da l\u00edngua (n\u00e3o por que eu escrevi ela, \u00e9 claro \ud83e\udd17):<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p>\u201cO que realmente significa \u00e9 que o Node.js\u00a0<em>n\u00e3o<\/em>\u00a0\u00e9 uma nova plataforma de bala de prata que dominar\u00e1 o mundo do desenvolvimento web.\u00a0Em vez disso, \u00e9 uma plataforma que preenche uma necessidade espec\u00edfica\u201d.<\/p>\r\n<cite>Eu, agora<\/cite><\/blockquote>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E entender isso \u00e9 absolutamente essencial (entendeu?).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea definitivamente n\u00e3o deseja usar o <strong>Node.j<\/strong>s para opera\u00e7\u00f5es com uso intensivo de <strong>CPU<\/strong>; us\u00e1-lo para computa\u00e7\u00e3o pesada anular\u00e1 quase todas as suas vantagens.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Onde o <strong>Node<\/strong> realmente brilha \u00e9 na <strong>cria\u00e7\u00e3o de aplicativos de rede escal\u00e1veis \u200b\u200be r\u00e1pidos<\/strong>, pois \u00e9 capaz de lidar com um grande n\u00famero de conex\u00f5es simult\u00e2neas com alto rendimento, o que equivale a alta escalabilidade.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como funciona sob o cap\u00f4 \u00e9 bastante interessante.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Comparado \u00e0s t\u00e9cnicas tradicionais de servi\u00e7o da Web, nas quais cada conex\u00e3o (solicita\u00e7\u00e3o) gera um novo encadeamento, ocupando a RAM do sistema e atingindo o limite m\u00e1ximo de quantidade de RAM dispon\u00edvel e claro toda aquela chatice que acontece e normalmente voc\u00ea fala: \u201c<em>mas na minha m\u00e1quina funciona<\/em>\u201d, o <strong>Node.js opera em um \u00fanico encadeamento<\/strong>, usando I \/ I sem bloqueio, permitindo suportar dezenas de milhares de conex\u00f5es simult\u00e2neas mantidas no<em> loop<\/em> de eventos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso ainda n\u00e3o esteja claro, vou desenhar pra voc\u00eas \ud83d\ude0e<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"624\" height=\"800\" class=\"wp-image-8433\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/Como-funciona.jpg\" alt=\"encadeamento do node js \" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Como-funciona.jpg 624w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Como-funciona-117x150.jpg 117w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Como-funciona-78x100.jpg 78w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Como-funciona-468x600.jpg 468w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Como-funciona-351x450.jpg 351w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Como-funciona-421x540.jpg 421w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Como-funciona-150x192.jpg 150w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea \u00e9 bom de matem\u00e1tica? Ent\u00e3o responda r\u00e1pido: supondo que cada <em>thread<\/em> possua potencialmente 2 MB de mem\u00f3ria, rodar em um sistema com <strong>8 GB de RAM<\/strong> nos coloca no m\u00e1ximo te\u00f3rico de<strong> 4.000<\/strong> conex\u00f5es simult\u00e2neas\u00a0<em>(c\u00e1lculos retirados do artigo de Michael Abernethy \u201cJust what is Node.js? \u201d, publicado no IBM developerWorks em 2011; infelizmente, o artigo n\u00e3o est\u00e1 mais dispon\u00edvel)<\/em>, mais o custo da\u00a0altern\u00e2ncia\u00a0de\u00a0contexto entre os encadeamentos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse \u00e9 o cen\u00e1rio com o qual voc\u00ea normalmente lida nas t\u00e9cnicas tradicionais de exibi\u00e7\u00e3o na web.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ao evitar tudo isso, o Node.js atinge <strong>n\u00edveis de escalabilidade <\/strong>de mais de\u00a01 milh\u00e3o de conex\u00f5es simult\u00e2neas\u00a0e mais de\u00a0600 mil conex\u00f5es simult\u00e2neas de <em>websockets<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se voc\u00ea entendeu, parab\u00e9ns! Poder\u00e1s ser o novo homem de ferro. Eu por sinal, descobri que n\u00e3o vai rolar pra mim \ud83d\ude2c<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Obviamente, existe a quest\u00e3o de<strong> compartilhar um \u00fanico encadeamento entre todas as solicita\u00e7\u00f5es de clientes<\/strong>, e \u00e9 uma armadilha potencial para escrever aplicativos <strong>Node.js<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em primeiro lugar, a computa\u00e7\u00e3o pesada poderia <strong>interromper o encadeamento \u00fanico do Node<\/strong> e causar problemas para todos os clientes (mais sobre isso posteriormente), pois as solicita\u00e7\u00f5es recebidas seriam bloqueadas at\u00e9 que a computa\u00e7\u00e3o fosse conclu\u00edda.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em segundo lugar, os desenvolvedores precisam ter muito cuidado para n\u00e3o permitir que uma exce\u00e7\u00e3o chegue ao<em><strong> loop<\/strong><\/em><strong> de eventos<\/strong> <strong>Node.js<\/strong>. (principal), o que far\u00e1 com que a<strong> inst\u00e2ncia Node.js.<\/strong> seja encerrada (travando efetivamente o programa).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A t\u00e9cnica usada para evitar exce\u00e7\u00f5es borbulhando na superf\u00edcie est\u00e1 transmitindo erros de volta ao chamador como <strong>par\u00e2metros de retorno de chamada<\/strong> (em vez de lan\u00e7\u00e1-los, como em outros ambientes).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mesmo que alguma exce\u00e7\u00e3o n\u00e3o tratada consiga surgir, foram desenvolvidas ferramentas para monitorar o processo <strong>Node.js<\/strong> e executar a\u00a0recupera\u00e7\u00e3o\u00a0necess\u00e1ria\u00a0de uma inst\u00e2ncia travada.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0Embora voc\u00ea provavelmente n\u00e3o consiga recuperar o estado atual da sess\u00e3o do usu\u00e1rio, o mais comum \u00e9 o\u00a0<strong>m\u00f3dulo Forever<\/strong>, ou o uso de uma abordagem diferente com as ferramentas externas do sistema,\u00a0<em>iniciadas<\/em>\u00a0e\u00a0<em>monitoradas<\/em>, ou mesmo\u00a0iniciadas.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-npm-o-gerenciador-de-pacotes-de-n-s-do-node-js\">NPM: O Gerenciador de Pacotes de N\u00f3s do Node.js<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-8428\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-1024x576.jpg\" alt=\"m\u00f3dulos NPM \" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-1024x576.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-150x84.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-100x56.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-600x337.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-450x253.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-960x540.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-300x169.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s-768x432.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/NPM-O-Gerenciador-de-Pacotes-de-N\u00f3s.jpg 1366w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ao discutir o <strong>Node.js<\/strong>, uma coisa que definitivamente n\u00e3o deve ser omitida \u00e9 o suporte\u00a0interno ao gerenciamento de pacotes usando o <strong>NPM<\/strong>, uma ferramenta que vem por padr\u00e3o a cada instala\u00e7\u00e3o do Node.js.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A ideia dos<strong> m\u00f3dulos NPM<\/strong> \u00e9 bastante semelhante \u00e0 do\u00a0<em>Ruby Gems<\/em>\u00a0(coisa boa essa linguagem, deveriam experimentar em uns jogos): um conjunto de <strong>componentes reutiliz\u00e1veis<\/strong> \u200b\u200bpublicamente dispon\u00edveis.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Dispon\u00edveis atrav\u00e9s de f\u00e1cil <strong>instala\u00e7\u00e3o via reposit\u00f3rio <em>on-line<\/em><\/strong>, com gerenciamento de vers\u00f5es e depend\u00eancias.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma lista completa de <strong>m\u00f3dulos empacotados<\/strong> pode ser encontrada no\u00a0site <strong>npm\u00a0<\/strong>ou acessada usando a ferramenta <strong>CLI npm<\/strong>, que \u00e9 automaticamente instalada com o <strong>Node.js<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O ecossistema do m\u00f3dulo \u00e9 aberto a todos e qualquer pessoa pode publicar seu pr\u00f3prio m\u00f3dulo que ser\u00e1 listado no reposit\u00f3rio <em>npm<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pra voc\u00ea que chegou at\u00e9 aqui, agora vamos aos<strong> b\u00f4nus<\/strong> e as DLcs de gr\u00e1tis!<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-alguns-dos-m-dulos-npm-mais-teis-atualmente-s-o\">Alguns dos <strong>m\u00f3dulos npm<\/strong> mais \u00fateis atualmente s\u00e3o:<\/h3>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Express<\/strong>: Express.js &#8211; ou simplesmente Express &#8211; uma estrutura de desenvolvimento web inspirada no Sinatra para o Node.js. e o padr\u00e3o de fato para a maioria dos aplicativos Node.j atualmente dispon\u00edveis.<\/li>\r\n<li><strong>Hapi<\/strong>: Uma estrutura centrada na configura\u00e7\u00e3o, modular e simples de usar, para a constru\u00e7\u00e3o de aplicativos da Web e de servi\u00e7os<\/li>\r\n<li><strong>Connect<\/strong>: Connect \u00e9 uma estrutura de servidor HTTP extens\u00edvel para Node.js, fornecendo uma cole\u00e7\u00e3o de &#8220;plugins&#8221; de alto desempenho conhecidos como middleware;\u00a0serve como base b\u00e1sica para o Express.<\/li>\r\n<li><strong>Socket.io<\/strong>\u00a0e\u00a0<strong>Sockjs<\/strong>: Componente do lado do servidor dos dois componentes mais comuns dos websockets atualmente dispon\u00edveis.<\/li>\r\n<li><strong>Pug<\/strong>\u00a0(anteriormente\u00a0<strong>Jade<\/strong>\u00a0): Um dos mecanismos de modelos populares, inspirado no HAML, um padr\u00e3o no Express.js.<\/li>\r\n<li><strong>Mongodb<\/strong>\u00a0e\u00a0<strong>Mongojs<\/strong>: wrappers MongoDB para fornecer a API para bancos de dados de objetos MongoDB em Node.js.<\/li>\r\n<li><strong>Redis<\/strong>: Biblioteca de clientes Redis.<\/li>\r\n<li><strong>Lodash (sublinhado, lazy.js)<\/strong>: O cinto de utilidades JavaScript.\u00a0O Underscore iniciou o jogo, mas foi derrubado por um de seus dois colegas, principalmente devido ao\u00a0melhor desempenho\u00a0e implementa\u00e7\u00e3o modular.<\/li>\r\n<li><strong>Forever<\/strong>: Provavelmente o utilit\u00e1rio mais comum para garantir que um determinado script de n\u00f3 seja executado continuamente.\u00a0Mant\u00e9m o processo do Node.js em produ\u00e7\u00e3o diante de falhas inesperadas.<\/li>\r\n<li><strong>Bluebird<\/strong>: Uma implementa\u00e7\u00e3o Promises \/ A + completa com desempenho excepcionalmente bom<\/li>\r\n<li><strong>Moment<\/strong>: Uma biblioteca de datas JavaScript para analisar, validar, manipular e formatar datas.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A lista continua.\u00a0Existem toneladas de pacotes realmente \u00fateis por a\u00ed, dispon\u00edveis para todos (sem ofensa para os que eu omiti aqui).<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-exemplos-de-onde-o-node-js-deve-ser-usado\">Exemplos de onde o Node.js deve ser usado<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-8429\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-1024x576.jpg\" alt=\" aplicativo multiusu\u00e1rio\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-1024x576.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-150x84.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-100x56.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-600x337.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-450x253.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-960x540.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-300x169.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado-768x432.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Exemplos-de-onde-o-Node.js-deve-ser-usado.jpg 1366w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-bate-papo\">Bate-Papo<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O bate-papo \u00e9 o <strong>aplicativo multiusu\u00e1rio<\/strong> mais t\u00edpico em tempo real (lembra do nosso msn, n\u00e9? Quem nunca encheu o saco sacudindo a tela pedindo aten\u00e7\u00e3o).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Desde o <strong>IRC<\/strong> (de volta ao dia), passando por muitos protocolos propriet\u00e1rios e abertos em execu\u00e7\u00e3o em portas n\u00e3o padr\u00e3o, at\u00e9 a capacidade de implementar tudo hoje no<strong> Node.js<\/strong> com <strong>websockets<\/strong> executando a porta 80 padr\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O aplicativo de bate-papo \u00e9 realmente o exemplo ideal do <strong>Node.js<\/strong>.: \u00e9 um aplicativo leve, de alto tr\u00e1fego e com uso intenso de dados (mas com baixo processamento\/computa\u00e7\u00e3o), que \u00e9 executado em dispositivos distribu\u00eddos.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tamb\u00e9m \u00e9 um \u00f3timo caso de uso para o aprendizado, pois \u00e9 simples, mas abrange a maioria dos paradigmas que voc\u00ea utilizar\u00e1 em um aplicativo t\u00edpico do<strong> Node.js<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vamos tentar descrever como isso funciona (<em>relaxa que no final eu desenho de novo<\/em>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No exemplo mais simples, temos uma \u00fanica sala de bate-papo em nosso site, onde as pessoas v\u00eam e podem trocar mensagens da maneira um para muitos (na verdade, todas).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por exemplo, digamos que temos tr\u00eas pessoas no site, todas conectadas ao nosso quadro de mensagens (<em>pensa num tinder estilo m\u00e9nage, n\u00e3o que eu conhe\u00e7a nenhum desses dois \u00e9 claro<\/em>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No lado do servidor, temos um aplicativo <strong>Express.js<\/strong> simples que implementa duas coisas:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li><strong>Um manipulador\u00a0GET \/\u00a0request, <\/strong>que serve a p\u00e1gina da Web e cont\u00e9m um quadro de mensagens e um bot\u00e3o &#8216;Enviar&#8217; para inicializar a entrada de novas mensagens<\/li>\r\n<li><strong>Um servidor websockets, <\/strong>que escuta novas mensagens emitidas pelos clientes <em>websocket<\/em>.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No lado do cliente, temos uma p\u00e1gina HTML com alguns manipuladores configurados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um para o evento de clique no bot\u00e3o &#8216;Enviar&#8217;, que pega a mensagem de entrada e a envia pelo <strong>websocket<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outra que recebe novas mensagens recebidas no<strong> cliente websockets<\/strong> (ou seja, mensagens enviadas por outros usu\u00e1rios, que o servidor agora deseja que o cliente exiba).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando um dos clientes publica uma mensagem, eis o que acontece:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>O navegador captura o clique no bot\u00e3o &#8216;Enviar&#8217; atrav\u00e9s de um <strong>manipulador JavaScript<\/strong>, pega o valor no campo de entrada (ou seja, o texto da mensagem) e emite uma mensagem <strong>websocket<\/strong>, usando o cliente websocket conectado ao nosso servidor (inicializado na inicializa\u00e7\u00e3o da p\u00e1gina da web).<\/li>\r\n<li>O componente do servidor da<strong> conex\u00e3o do websocket <\/strong>recebe a mensagem e a encaminha para todos os outros clientes conectados usando o m\u00e9todo de transmiss\u00e3o.<\/li>\r\n<li>Todos os clientes recebem a nova mensagem como uma mensagem <em>push<\/em> por meio de um componente do lado do cliente dos <strong>websockets<\/strong> em execu\u00e7\u00e3o na p\u00e1gina da web.\u00a0Eles ent\u00e3o escolhem o conte\u00fado da mensagem e atualizam a p\u00e1gina da Web anexando a nova mensagem ao quadro.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"600\" class=\"wp-image-8435\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/bate-papo.jpg\" alt=\"conex\u00e3o do websocket\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/bate-papo.jpg 624w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/bate-papo-150x144.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/bate-papo-100x96.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/bate-papo-600x577.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/bate-papo-450x433.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/bate-papo-562x540.jpg 562w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse \u00e9 o\u00a0exemplo mais simples. Para uma\u00a0solu\u00e7\u00e3o\u00a0mais\u00a0robusta, voc\u00ea pode usar um<em> cache <\/em>simples com base no armazenamento <strong>Redis<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ou, em uma solu\u00e7\u00e3o ainda mais avan\u00e7ada, uma<strong> fila de mensagens<\/strong> para lidar com o roteamento de mensagens para clientes e um mecanismo de entrega mais robusto, que pode cobrir perdas tempor\u00e1rias de conex\u00e3o ou armazenar mensagens para clientes registrados enquanto est\u00e3o offline.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas, independentemente das melhorias que voc\u00ea fizer, o<strong> Node.js <\/strong>ainda estar\u00e1 operando sob os mesmos<strong> princ\u00edpios b\u00e1sico<\/strong>s: reagindo a eventos, manipulando muitas conex\u00f5es simult\u00e2neas e mantendo a fluidez na experi\u00eancia do usu\u00e1rio.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-api-em-cima-de-um-banco-de-dados-de-objetos\">API em cima de um banco de dados de objetos<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Embora o <strong>Node.js<\/strong> realmente brilhe com aplicativos em tempo real, \u00e9 perfeitamente natural expor os dados dos<a href=\"https:\/\/geekblogti.wpengine.com\/sql-nosql-newsql-qual-banco-de-dados-usar\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" bancos de dados (abre numa nova aba)\"><strong> bancos de dados<\/strong><\/a> de objetos (por exemplo,<strong> MongoDB<\/strong>).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os dados armazenados<strong> JSON<\/strong> permitem que o <strong>Node.js<\/strong> funcione sem a incompatibilidade de imped\u00e2ncia e a convers\u00e3o de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por exemplo, se voc\u00ea estiver usando o <strong>Rails<\/strong>, converter\u00e1 de <strong>JSON<\/strong> para modelos bin\u00e1rios e os expor\u00e1 de volta como<strong> JSON <\/strong>sobre o <strong>HTTP <\/strong>quando os dados forem consumidos por <strong>Backbone.js, <a href=\"https:\/\/geekblogti.wpengine.com\/um-overview-sobre-o-framework-angular\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Angular.js (abre numa nova aba)\">Angular.js<\/a><\/strong>, etc. ou mesmo <strong>jQuery AJAX <\/strong>simples chamadas.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com o <strong>Node.js<\/strong>, voc\u00ea pode simplesmente expor seus objetos <strong>JSON<\/strong> com uma <a href=\"https:\/\/geekblogti.wpengine.com\/sua-api-nao-e-restful-entenda-por-que\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"API REST  (abre numa nova aba)\"><strong>API REST <\/strong><\/a>para o cliente consumir.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Al\u00e9m disso, voc\u00ea n\u00e3o precisa se preocupar com a convers\u00e3o entre<strong> JSON <\/strong>e o que quer que seja ao ler ou gravar em seu banco de dados (se estiver usando o <strong>MongoDB<\/strong>).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em suma, voc\u00ea pode evitar a necessidade de v\u00e1rias convers\u00f5es usando um formato uniforme de<strong> serializa\u00e7\u00e3o de dados <\/strong>no cliente, servidor e banco de dados.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.geekhunter.com.br\/vagas-node-js?utm_source=blog&amp;utm_medium=banner&amp;utm_campaign=nodejs\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"200\" class=\"wp-image-11801\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2020\/03\/Copy-of-Template-CTA-Blog-@2x.png\" alt=\"vagas node\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/03\/Copy-of-Template-CTA-Blog-@2x.png 720w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/03\/Copy-of-Template-CTA-Blog-@2x-150x42.png 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/03\/Copy-of-Template-CTA-Blog-@2x-100x28.png 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/03\/Copy-of-Template-CTA-Blog-@2x-600x167.png 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2020\/03\/Copy-of-Template-CTA-Blog-@2x-450x125.png 450w\" sizes=\"(max-width: 720px) 100vw, 720px\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-entradas-em-fila\">Entradas em fila<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se voc\u00ea estiver recebendo uma grande quantidade de dados simult\u00e2neos, seu banco de dados pode se tornar um gargalo.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como mostrado acima, o Node.js pode lidar facilmente com as <strong>conex\u00f5es simult\u00e2neas<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas, como o acesso ao banco de dados \u00e9 uma opera\u00e7\u00e3o de bloqueio (neste caso), encontramos problemas.\u00a0A solu\u00e7\u00e3o \u00e9 <strong>reconhecer o comportamento do cliente<\/strong> antes que os dados sejam realmente gravados no banco de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com essa abordagem, o sistema mant\u00e9m sua capacidade de resposta sob uma carga pesada, o que \u00e9 particularmente \u00fatil quando o cliente n\u00e3o precisa da confirma\u00e7\u00e3o firme da grava\u00e7\u00e3o bem-sucedida dos dados.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Exemplos t\u00edpicos incluem: o registro ou grava\u00e7\u00e3o de dados de rastreamento do usu\u00e1rio, processados \u200b\u200bem lotes e n\u00e3o utilizados at\u00e9 mais tarde;\u00a0bem como opera\u00e7\u00f5es que n\u00e3o precisam ser refletidas instantaneamente (como atualizar uma contagem de &#8216;Curtidas&#8217; no <strong>Facebook<\/strong>), onde a\u00a0consist\u00eancia eventual\u00a0(geralmente usada no mundo<a href=\"https:\/\/geekblogti.wpengine.com\/banco-de-dados-nosql-um-manual-pratico-e-didatico\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" NoSQL (abre numa nova aba)\"><strong> NoSQL<\/strong><\/a>) \u00e9 aceit\u00e1vel.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os dados s\u00e3o enfileirados por meio de algum tipo de<em> infraestrutura de cache <\/em>ou de enfileiramento de mensagens \u2014 como <strong>RabbitMQ ou ZeroMQ<\/strong> \u2014 e digeridos por um processo separado de grava\u00e7\u00e3o em lote de banco de dados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ou ent\u00e3o, <strong>servi\u00e7os de back-end de processamento intensivo<\/strong> de computa\u00e7\u00e3o, escritos em uma plataforma com melhor desempenho para essas tarefas.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Comportamento semelhante pode ser implementado com outras linguagens\/estruturas, mas n\u00e3o no mesmo <em>hardware<\/em>, com a mesma alta e mantida taxa de transfer\u00eancia.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"600\" class=\"wp-image-8434\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/entradas-em-fila.jpg\" alt=\"browser database e server \" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/entradas-em-fila.jpg 624w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/entradas-em-fila-150x144.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/entradas-em-fila-100x96.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/entradas-em-fila-600x577.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/entradas-em-fila-450x433.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/entradas-em-fila-562x540.jpg 562w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em resumo: com o Node, voc\u00ea pode <strong>empurrar as grava\u00e7\u00f5es do banco de dados<\/strong> para o lado e lidar com elas mais tarde, procedendo como se tivessem sucesso.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-transmiss-o-de-dados\">Transmiss\u00e3o de Dados<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nas plataformas da web mais tradicionais, solicita\u00e7\u00f5es e respostas <strong>HTTP <\/strong>s\u00e3o tratadas como eventos isolados. Na verdade, eles s\u00e3o realmente fluxos.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Essa observa\u00e7\u00e3o pode ser utilizada no Node.js para criar alguns recursos interessantes.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por exemplo, \u00e9 poss\u00edvel <strong>processar arquivos enquanto eles ainda est\u00e3o sendo carregados<\/strong>, pois os dados chegam por meio de um fluxo e podemos process\u00e1-los on-line.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso pode ser feito para\u00a0<strong>codifica\u00e7\u00e3o de \u00e1udio ou v\u00eddeo<\/strong> em tempo real\u00a0e <em>proxy <\/em>entre diferentes fontes de dados (consulte a pr\u00f3xima se\u00e7\u00e3o).<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-proxy\">Proxy<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O <strong>Node.js<\/strong> \u00e9 facilmente empregado como um <em>proxy<\/em> do lado do servidor, onde pode lidar com uma grande quantidade de conex\u00f5es simult\u00e2neas de maneira n\u00e3o-bloqueadora.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 especialmente \u00fatil para fazer o <em>proxy<\/em> de diferentes servi\u00e7os com diferentes tempos de resposta ou coletar dados de v\u00e1rios pontos de origem.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Um exemplo: Considere um aplicativo do servidor se comunicando com recursos de terceiros, obtendo dados de diferentes fontes ou armazenando ativos como imagens e v\u00eddeos em servi\u00e7os em nuvem de terceiros.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Embora existam <strong>servidores proxy <\/strong>dedicados, o uso do <strong>Node<\/strong> pode ser \u00fatil se a sua infraestrutura de <em>proxy <\/em>n\u00e3o existir ou se voc\u00ea precisar de uma solu\u00e7\u00e3o para o desenvolvimento local.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com isso quero dizer que voc\u00ea poderia criar um aplicativo do lado do cliente com um servidor de desenvolvimento <strong>Node.js<\/strong>. para recursos e solicita\u00e7\u00f5es de<strong> API de proxy \/ stubbing<\/strong>, enquanto na produ\u00e7\u00e3o voc\u00ea lidaria com essas intera\u00e7\u00f5es com um servi\u00e7o de <em>proxy <\/em>dedicado (nginx, HAProxy etc.)<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-corre-o-painel-do-comercial\">Corre\u00e7\u00e3o \u2014 Painel do Comercial<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vamos voltar ao n\u00edvel do aplicativo.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outro exemplo em que o<em> software de desktop <\/em>domina, mas pode ser facilmente substitu\u00eddo por uma solu\u00e7\u00e3o da Web em tempo real, \u00e9 o <strong>software de negocia\u00e7\u00e3o de corretores<\/strong>, usado para rastrear os pre\u00e7os das a\u00e7\u00f5es, realizar c\u00e1lculos, an\u00e1lises t\u00e9cnicas e criar gr\u00e1ficos ou tabelas.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mudar para uma solu\u00e7\u00e3o baseada na Web em tempo real permitiria aos corretores trocar facilmente esta\u00e7\u00f5es de trabalho ou locais de trabalho.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em breve, poderemos come\u00e7ar a v\u00ea-los na praia da Fl\u00f3rida, ou Ibiza, ou Bali, ou at\u00e9 mesmo em Floripa \ud83d\ude1c.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-painel-de-monitoramento-de-aplicativos\">Painel de monitoramento de aplicativos<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outro caso de uso comum no qual o N\u00f3 com soquetes da Web se encaixa perfeitamente: rastreando os visitantes do site e visualizando suas intera\u00e7\u00f5es em tempo real.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea pode <strong>coletar estat\u00edsticas<\/strong> em tempo real do seu usu\u00e1rio ou at\u00e9 mov\u00ea-lo para o pr\u00f3ximo n\u00edvel, introduzindo intera\u00e7\u00f5es direcionadas com seus visitantes, abrindo um canal de comunica\u00e7\u00e3o quando eles atingirem um ponto espec\u00edfico no seu funil.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em>(Se voc\u00ea estiver interessado, essa ideia j\u00e1 est\u00e1 sendo produzida pelo\u00a0<a href=\"https:\/\/www.canddi.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">CANDDi<\/a>\u00a0.)<\/em><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Imagine como voc\u00ea poderia melhorar seus neg\u00f3cios se soubesse o que seus visitantes estavam fazendo em tempo real \u2014 se pudesse visualizar as intera\u00e7\u00f5es deles.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com os soquetes bidirecionais em tempo real do<strong> Node.js<\/strong>, agora voc\u00ea pode.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-painel-de-monitoramento-do-sistema\">Painel de monitoramento do sistema<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Agora, vamos visitar o lado da infraestrutura (tem um brother meu, o Gui gui do caf\u00e9 forte, que vai gostar dessa parte).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Imagine, por exemplo, um<strong> provedor de SaaS <\/strong>que queira oferecer a seus usu\u00e1rios uma p\u00e1gina de monitoramento de servi\u00e7os, como a p\u00e1gina de status do<strong> GitHub<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com o loop de eventos do <strong>Node.js<\/strong>., podemos criar um poderoso painel baseado na Web que verifica os status dos servi\u00e7os de maneira\u00a0ass\u00edncrona\u00a0e envia dados aos clientes que usam<em> websockets<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tanto o <em>status<\/em> dos servi\u00e7os internos (dentro da empresa) quanto os servi\u00e7os p\u00fablicos podem ser relatados ao vivo e em<strong> tempo real<\/strong> usando essa tecnologia.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Aprofunde um pouco mais essa ideia e tente imaginar aplicativos de monitoramento do<strong>\u00a0Network Operations Center (NOC)\u00a0<\/strong>em um operador de telecomunica\u00e7\u00f5es, provedor de nuvem\/rede\/hospedagem ou alguma institui\u00e7\u00e3o financeira.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Todos executados na pilha da Web aberta, suportada pelo<strong> Node.js<\/strong> e we<em>bsockets<\/em>, em vez de<a href=\"https:\/\/geekblogti.wpengine.com\/tudo-sobre-java\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" Java (abre numa nova aba)\"><strong> Java<\/strong><\/a> e\/ou Java<em> Applets.<\/em><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em>Nota: N\u00e3o tente criar sistemas r\u00edgidos em tempo real no Node (ou seja, sistemas que exigem tempos de resposta consistentes). Erlang \u00e9 provavelmente uma escolha melhor\u00a0para essa classe de aplicativo.<\/em><\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-aplica-es-web-do-servidor\">Aplica\u00e7\u00f5es web do servidor<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O<strong> Node.js, <\/strong>com o <strong>Express.js<\/strong>, tamb\u00e9m pode ser usado para criar aplicativos da Web cl\u00e1ssicos no lado do servidor.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No entanto, embora poss\u00edvel, esse paradigma de solicita\u00e7\u00e3o-resposta no qual o <strong>Node.js<\/strong> carregaria o HTML renderizado n\u00e3o \u00e9 o caso de uso mais comum.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">H\u00e1 argumentos a serem feitos a favor e contra essa abordagem.\u00a0Aqui est\u00e3o alguns fatos a serem considerados:<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-pr-s\">Pr\u00f3s<\/h4>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Se o seu aplicativo n\u00e3o possuir<strong> computa\u00e7\u00e3o intensiva da CPU<\/strong>, voc\u00ea poder\u00e1 constru\u00ed-lo em<strong> Javascript <\/strong>de cima para baixo, at\u00e9 o n\u00edvel do banco de dados, se voc\u00ea usar um BD de Objetos de armazenamento <strong>JSON<\/strong>, como o <strong>MongoDB<\/strong>.\u00a0Isso facilita significativamente o desenvolvimento (incluindo a contrata\u00e7\u00e3o).<\/li>\r\n<li>Os rastreadores recebem uma resposta <strong>HTML<\/strong> totalmente renderizada, que \u00e9 muito mais amig\u00e1vel ao <strong>SEO<\/strong> do que, digamos, um aplicativo de p\u00e1gina \u00fanica ou um aplicativo <em>websockets <\/em>executado sobre o Node.js.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\" id=\"h-contras\">Contras<\/h4>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Qualquer <strong>computa\u00e7\u00e3o intensiva da CPU<\/strong> bloquear\u00e1 a capacidade de resposta do Node.js. Portanto, uma plataforma encadeada \u00e9 uma abordagem melhor.\u00a0Como alternativa, voc\u00ea pode tentar expandir o c\u00e1lculo [*].<\/li>\r\n<li>Usar o Node.js com um<strong> banco de dados relacional<\/strong> ainda \u00e9 bastante trabalhoso (veja abaixo para mais detalhes).\u00a0Fa\u00e7a um favor a si mesmo e escolha outro ambiente, como <strong>Rails, Django ou ASP.Net MVC<\/strong>, se voc\u00ea estiver tentando executar opera\u00e7\u00f5es relacionais.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em>[*] Uma alternativa a esses c\u00e1lculos intensivos da CPU \u00e9 criar um ambiente de backup MQ altamente escal\u00e1vel com processamento de backend para manter o Node como um &#8216;funcion\u00e1rio&#8217; de frente para lidar com solicita\u00e7\u00f5es de clientes de forma ass\u00edncrona.<\/em><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-onde-o-node-js-n-o-deve-ser-usado-se-liga-nessa-parte\">Onde o Node.js n\u00e3o deve ser usado (se liga nessa parte!)<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-8430\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-1024x576.jpg\" alt=\"onde n\u00e3o usar o node \" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-1024x576.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-150x84.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-100x56.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-600x337.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-450x253.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-960x540.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-300x169.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte-768x432.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Onde-o-Node.js-n\u00e3o-deve-ser-usado-se-liga-nessa-parte.jpg 1366w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-aplicativo-web-do-servidor-lateral-com-um-db-relacional-atr-s\">Aplicativo web do servidor lateral com um DB relacional atr\u00e1s<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Comparando o <strong>Node.js<\/strong> com o <strong>Express.js<\/strong> contra o <strong>Ruby on Rails<\/strong>, por exemplo, costumava haver uma decis\u00e3o clara a favor do \u00faltimo quando se tratava de acessar bancos de dados relacionais como <strong>PostgreSQL, MySQL e Microsoft SQL Server<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">As ferramentas de banco de dados relacional para o <strong>Node.js<\/strong> ainda estavam em seus est\u00e1gios iniciais.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por outro lado, o Rails fornece automaticamente a configura\u00e7\u00e3o de acesso a dados imediatamente, juntamente com as ferramentas de suporte \u00e0 migra\u00e7\u00e3o de esquemas de <strong>banco de dados<\/strong> e outras <em>Gems<\/em> (trocadilhos).\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O <strong>Rails<\/strong> e suas estruturas de pares t\u00eam implementa\u00e7\u00f5es maduras e comprovadas da camada de acesso a dados do<strong> Active Record<\/strong> ou <strong>Data Mapper.<\/strong> [*]<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas as coisas mudaram.\u00a0<strong>Seq\u00fcelizar,\u00a0TypeORM\u00a0e\u00a0Bookshelf\u00a0<\/strong>foram um longo caminho para se tornarem solu\u00e7\u00f5es<strong> ORM<\/strong> maduras.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Tamb\u00e9m pode valer a pena conferir o\u00a0<strong>Join Monster<\/strong>\u00a0se voc\u00ea estiver procurando gerar<strong> SQL<\/strong> a partir de consultas <strong>GraphQL<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em>[*] \u00c9 poss\u00edvel e n\u00e3o incomum usar o Node apenas como front-end, mantendo o back-end do Rails e seu f\u00e1cil acesso a um banco de dados relacional.<\/em><\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p><a href=\"https:\/\/geekblogti.wpengine.com\/apache-kafka\/\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Kafka<\/a>: o que \u00e9 e como integrar dados<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-node-js-realmente-vale-a-pena\">Node.js: realmente vale a pena?<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-8431\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-1024x576.jpg\" alt=\"opera\u00e7\u00f5es de bloqueio \" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-1024x576.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-150x84.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-100x56.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-600x337.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-450x253.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-960x540.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-300x169.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4-768x432.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/Conclus\u00e3o-4.jpg 1366w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Discutimos o <strong>Node.js<\/strong> da teoria \u00e0 pr\u00e1tica, come\u00e7ando com seus objetivos e ambi\u00e7\u00f5es e terminando com seus pontos positivos e negativos.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando as pessoas enfrentam problemas com o Node, quase sempre se resume ao fato de que as\u00a0<strong>opera\u00e7\u00f5es de bloqueio s\u00e3o a raiz de todos os males<\/strong> \u2014\u00a099% dos usos indevidos do n\u00f3 s\u00e3o uma consequ\u00eancia direta.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Lembre-se<strong>:<\/strong> o Node.js nunca foi criado para resolver o problema de dimensionamento da computa\u00e7\u00e3o.\u00a0Foi criado para resolver o problema de dimensionamento de E \/ S, o que\u00a0faz muito bem.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o, Brun\u00e3o do meu agrado, por que usar o Node.js?\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se o seu caso de uso n\u00e3o contiver<strong> opera\u00e7\u00f5es intensivas de CPU <\/strong>(tipo o jogo <strong>Zelda 4k<\/strong>) nem acessar recursos de bloqueio, voc\u00ea poder\u00e1 explorar os benef\u00edcios do <strong>Node.js<\/strong> e aproveitar aplicativos de rede r\u00e1pidos e escal\u00e1veis.\u00a0<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-p-s-cr-ditos-computa-o-e-processamento-pesado-do-lado-do-servidor\">P\u00f3s-cr\u00e9ditos: Computa\u00e7\u00e3o e Processamento pesado do lado do servidor<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-8432\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-1024x576.jpg\" alt=\"node.js computa\u00e7\u00e3o e processamento em servidor\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-1024x576.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-150x84.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-100x56.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-600x337.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-450x253.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-960x540.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-300x169.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor-768x432.jpg 768w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/11\/P\u00f3s-cr\u00e9ditos-Computa\u00e7\u00e3o-e-Processamento-pesado-do-lado-do-servidor.jpg 1366w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando se trata de computa\u00e7\u00e3o pesada, o <strong>Node.js<\/strong> n\u00e3o \u00e9 a melhor plataforma existente.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">N\u00e3o, voc\u00ea definitivamente n\u00e3o deseja criar um\u00a0servidor de computa\u00e7\u00e3o <strong>Fibonacci<\/strong> no<strong> Node.js<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em geral, qualquer opera\u00e7\u00e3o intensiva da CPU anula todos os benef\u00edcios de <strong>taxa de transfer\u00eancia<\/strong> que o Node oferece com seu modelo de E \/ S n\u00e3o bloqueado por eventos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso pois todas as solicita\u00e7\u00f5es recebidas ser\u00e3o bloqueadas enquanto o encadeamento estiver ocupado com a tritura\u00e7\u00e3o de n\u00fameros \u2014 supondo que voc\u00ea esteja tentando executar seus c\u00e1lculos na mesma inst\u00e2ncia do <strong>Node<\/strong> com a qual voc\u00ea est\u00e1 respondendo \u00e0s solicita\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como afirmado anteriormente, o <strong>Node.js<\/strong> \u00e9 de<em> thread \u00fanico<\/em> e usa apenas um <strong>\u00fanico n\u00facleo de CPU<\/strong>.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando se trata de adicionar simultaneidade em um servidor com v\u00e1rios n\u00facleos, a equipe principal do Node trabalha na forma de um <strong>m\u00f3dulo de cluster <\/strong>[<em>ref: <a href=\"http:\/\/nodejs.org\/api\/cluster.html\">http:\/\/nodejs.org\/api\/cluster<\/a><a href=\"http:\/\/nodejs.org\/api\/cluster.html\" target=\"_blank\" rel=\"noreferrer noopener\">.<\/a><a href=\"http:\/\/nodejs.org\/api\/cluster.html\">html<\/a><\/em>].\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea tamb\u00e9m pode executar v\u00e1rias inst\u00e2ncias do servidor <strong>Node.js<\/strong>. com bastante facilidade por tr\u00e1s de um\u00a0<em>proxy reverso<\/em> via <strong>nginx<\/strong>\u00a0.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com o armazenamento em <em>cluster<\/em>, voc\u00ea ainda deve descarregar toda a computa\u00e7\u00e3o pesada em processos em segundo plano gravados em um ambiente mais apropriado para isso, e comunic\u00e1-los por meio de um servidor de fila de mensagens como o <strong>RabbitMQ<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Embora seu processamento em segundo plano possa ser executado no mesmo servidor inicialmente, essa abordagem tem o potencial de uma escalabilidade muito alta.\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esses servi\u00e7os de processamento em segundo plano podem ser facilmente distribu\u00eddos para<strong> servidores de trabalho<\/strong> separados, sem a necessidade de configurar as cargas de servidores da Web voltados para a frente.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Obviamente, voc\u00ea tamb\u00e9m usaria a mesma abordagem em outras plataformas, mas com o Node.js voc\u00ea obt\u00e9m o alto rendimento de<em> reqs \/ s<\/em> de que falamos, pois cada solicita\u00e7\u00e3o \u00e9 uma pequena tarefa tratada com rapidez e efici\u00eancia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Bem-vindo \u00e0 web em tempo real. De seu amigo da vizinhan\u00e7a, o Brunoaranha \ud83e\udd17<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"h-faq\">FAQ<\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-o-que-node-js\">O que \u00e9 Node.js?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O Node.js. \u00e9 uma compila\u00e7\u00e3o empacotada do mecanismo JavaScript V8 do Google, a camada de abstra\u00e7\u00e3o da plataforma libuv e uma biblioteca principal, que \u00e9 basicamente escrita em JavaScript.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ou seja, com o Node.js, voc\u00ea passa a utilizar Javascript n\u00e3o somente nos navegadores, mas em qualquer ambiente. As possibilidades aumentam muito.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ele usa uma arquitetura voltada a eventos, onde interpreta, em uma \u00fanica thread, as requisi\u00e7\u00f5es de forma ass\u00edncrona em vez de sequenciais, e n\u00e3o permitindo bloqueios.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-por-que-usar-node-js\">Por que usar Node.js?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\" id=\"be89\">O loop de eventos do Node recebe v\u00e1rias requisi\u00e7\u00f5es, como por exemplo, buscar alguma informa\u00e7\u00e3o no banco, ler um arquivo no servidor, etc. Ao executar uma a\u00e7\u00e3o, ele n\u00e3o espera o tempo de resposta, j\u00e1 iniciando a a\u00e7\u00e3o da segunda, e assim por diante.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\" id=\"be89\">Assim que alguma dessas requisi\u00e7\u00f5es forem respondidas, \u00e9 disparado um evento e o callback \u00e9 posto na fila para ser executado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Lidando com a concorr\u00eancia dessa maneira, evita-se a cria\u00e7\u00e3o de m\u00faltiplas threads que ocupariam grande parte da CPU. Pelo Node, ocorre um ganho muito grande de n\u00famero de requisi\u00e7\u00f5es que podem ser processadas.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-onde-usar-node-js\">Onde usar Node.js?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em resumo, voc\u00ea deve usar o Node.js em situa\u00e7\u00f5es em que h\u00e1 muitas requisi\u00e7\u00f5es, j\u00e1 que, usando um loop de eventos, o Node.js interpreta, em uma \u00fanica thread, as requisi\u00e7\u00f5es de forma ass\u00edncrona em vez de sequenciais, e n\u00e3o permitindo bloqueios.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea pode usar Node.js em APIs, aplica\u00e7\u00f5es web em tempo real como chats ou ferramentas de m\u00faltiplos usu\u00e1rios, jogos multiplayer, aplica\u00e7\u00f5es que demandam alta escabilidade, servidores de streaming de dados e ambientes escal\u00e1veis.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"h-onde-n-o-usar-node-js\">Onde n\u00e3o usar Node.js?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por usar somente uma thread, n\u00e3o \u00e9 recomendado usar o Node.js em algoritmos complexos que exijam muita CPU. Tamb\u00e9m n\u00e3o deve ser usado em aplica\u00e7\u00f5es que exploram os recursos de bloqueio.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por exemplo, em softwares de edi\u00e7\u00e3o de imagens, ele impediria as outras a\u00e7\u00f5es de serem executadas at\u00e9 o processamento estar completo!<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>A crescente popularidade do JavaScript trouxe muitas mudan\u00e7as, e a face do desenvolvimento da web hoje \u00e9 drasticamente diferente.\u00a0 Hoje em dia \u00e9 dif\u00edcil imaginar o que podemos fazer na Web com o JavaScript em execu\u00e7\u00e3o no servidor e no navegador. H\u00e1 apenas alguns anos, ou foram encapsulados em ambientes de \u00e1rea restrita, como Flash [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":11806,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-8292","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Node.js: Por que e como usar? V\u00e1rias justificativas! - Blog Geekhunter<\/title>\n<meta name=\"description\" content=\"Ser\u00e1 que o Node.JS nada mais \u00e9 do que um JavaScript nutella? Fazemos uma explica\u00e7\u00e3o detalhada de porque usar Node.js em seus projetos!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Por que diabos usar o Node.js? Uma justificativa passo a passo\" \/>\n<meta property=\"og:description\" content=\"A crescente popularidade do JavaScript trouxe muitas mudan\u00e7as, e a face do desenvolvimento da web hoje \u00e9 drasticamente diferente.\u00a0 Hoje em dia \u00e9 dif\u00edcil\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-29T13:24:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-29T14:46:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/02\/1_mp91A9RzagntGGjBnwu4Yw.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"Por que diabos usar o Node.js? Uma justificativa passo a passo\",\"datePublished\":\"2024-10-29T13:24:36+00:00\",\"dateModified\":\"2024-10-29T14:46:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/\"},\"wordCount\":4875,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/1_mp91A9RzagntGGjBnwu4Yw.png\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/\",\"name\":\"Node.js: Por que e como usar? V\u00e1rias justificativas! - Blog Geekhunter\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/1_mp91A9RzagntGGjBnwu4Yw.png\",\"datePublished\":\"2024-10-29T13:24:36+00:00\",\"dateModified\":\"2024-10-29T14:46:41+00:00\",\"description\":\"Ser\u00e1 que o Node.JS nada mais \u00e9 do que um JavaScript nutella? Fazemos uma explica\u00e7\u00e3o detalhada de porque usar Node.js em seus projetos!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/1_mp91A9RzagntGGjBnwu4Yw.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/1_mp91A9RzagntGGjBnwu4Yw.png\",\"width\":2560,\"height\":1440,\"caption\":\"nodejs\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/por-que-usar-node-js-uma-justificativa-passo-a-passo\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Por que diabos usar o Node.js? Uma justificativa passo a passo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js: Por que e como usar? V\u00e1rias justificativas! - Blog Geekhunter","description":"Ser\u00e1 que o Node.JS nada mais \u00e9 do que um JavaScript nutella? Fazemos uma explica\u00e7\u00e3o detalhada de porque usar Node.js em seus projetos!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/","og_locale":"pt_BR","og_type":"article","og_title":"Por que diabos usar o Node.js? Uma justificativa passo a passo","og_description":"A crescente popularidade do JavaScript trouxe muitas mudan\u00e7as, e a face do desenvolvimento da web hoje \u00e9 drasticamente diferente.\u00a0 Hoje em dia \u00e9 dif\u00edcil","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2024-10-29T13:24:36+00:00","article_modified_time":"2024-10-29T14:46:41+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/02\/1_mp91A9RzagntGGjBnwu4Yw.png","type":"image\/png"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"27 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"Por que diabos usar o Node.js? Uma justificativa passo a passo","datePublished":"2024-10-29T13:24:36+00:00","dateModified":"2024-10-29T14:46:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/"},"wordCount":4875,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/02\/1_mp91A9RzagntGGjBnwu4Yw.png","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/","name":"Node.js: Por que e como usar? V\u00e1rias justificativas! - Blog Geekhunter","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/02\/1_mp91A9RzagntGGjBnwu4Yw.png","datePublished":"2024-10-29T13:24:36+00:00","dateModified":"2024-10-29T14:46:41+00:00","description":"Ser\u00e1 que o Node.JS nada mais \u00e9 do que um JavaScript nutella? Fazemos uma explica\u00e7\u00e3o detalhada de porque usar Node.js em seus projetos!","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2021\/02\/1_mp91A9RzagntGGjBnwu4Yw.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2021\/02\/1_mp91A9RzagntGGjBnwu4Yw.png","width":2560,"height":1440,"caption":"nodejs"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/por-que-usar-node-js-uma-justificativa-passo-a-passo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"Por que diabos usar o Node.js? Uma justificativa passo a passo"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/8292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/users\/167"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=8292"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/8292\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/11806"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=8292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=8292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=8292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}