<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luma Pontes</title>
    <description>The latest articles on DEV Community by Luma Pontes (@pontesluma).</description>
    <link>https://dev.to/pontesluma</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F515239%2F8b128018-7aa0-4c1f-b8f2-c637851a6f55.png</url>
      <title>DEV Community: Luma Pontes</title>
      <link>https://dev.to/pontesluma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pontesluma"/>
    <language>en</language>
    <item>
      <title>Finalmente entendendo Node.js</title>
      <dc:creator>Luma Pontes</dc:creator>
      <pubDate>Mon, 16 Nov 2020 15:05:10 +0000</pubDate>
      <link>https://dev.to/pontesluma/finalmente-entendendo-node-js-g60</link>
      <guid>https://dev.to/pontesluma/finalmente-entendendo-node-js-g60</guid>
      <description>&lt;p&gt;Com esse artigo você vai entender o que é e como funciona Node.js de forma simples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sumário
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Intro: Front-end e Back-end&lt;/li&gt;
&lt;li&gt;Javascript: o ‘js’ de Node.js&lt;/li&gt;
&lt;li&gt;Node.js: o que é, como foi feito e como funciona?&lt;/li&gt;
&lt;li&gt;Consideração final&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Intro: Front-end e Back-end
&lt;/h2&gt;

&lt;p&gt;A arquitetura de uma aplicação web pode ser dividida em basicamente 2 componentes: o Front-end e o Back-end.&lt;br&gt;
O Front-end é a interface do aplicativo, ou seja, toda estrutura que você vê em tela. Essa parte do projeto irá interagir diretamente com o usuário e por isso é tão relevante.&lt;/p&gt;

&lt;p&gt;Já o Back-end é toda a inteligência por trás das cortinas. O usuário não o vê, mas é o que faz o aplicativo funcionar.&lt;br&gt;
Esses 2 segmentos conversam o tempo todo.&lt;/p&gt;

&lt;h4&gt;
  
  
  Exemplo:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hEC_08bv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uosceoij22mgm1j3up7h.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hEC_08bv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uosceoij22mgm1j3up7h.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;O Front-end exibe em tela um formulário de login.&lt;/li&gt;
&lt;li&gt;Ao apertarmos o botão o Front-end faz uma requisição ao Back-end.&lt;/li&gt;
&lt;li&gt;O Back-end, com os dados inseridos no formulário, verifica no servidor o e-mail e a senha e retorna se houve um erro ou se o usuário foi autenticado.&lt;/li&gt;
&lt;li&gt;Com essa informação, o Front-end decide se exibe uma mensagem de erro ou se transfere o usuário para a página principal da aplicação.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Javascript: o ‘js’ de Node.js
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Javascript para front-end.
&lt;/h4&gt;

&lt;p&gt;Definida como uma linguagem script para o ambiente web, Javascript é tradicionalmente aplicada no Front-end. Com seu uso, é possível construir sites e aplicações interativas e dinâmicas. Para isso os navegadores têm mecanismos, chamados também de &lt;a href="https://en.wikipedia.org/wiki/JavaScript_engine"&gt;motores&lt;/a&gt;, que são capazes de executar javascript.&lt;/p&gt;

&lt;h4&gt;
  
  
  Javascript para back-end?
&lt;/h4&gt;

&lt;p&gt;Antes da existência de Node.js, javascript não era comumente utilizado para programação do Back-end. Pelo fato da linguagem ser interpretada ao invés de compilada, seu uso não era eficiente para essa finalidade e podia deixar o aplicativo web muito lento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Node.js
&lt;/h2&gt;

&lt;h4&gt;
  
  
  O que é?
&lt;/h4&gt;

&lt;p&gt;Node.js é um ‘runtime enviroment’ de javascript. Em outras palavras: É um mecanismo responsável pela execução do programa de uma forma que torna eficiente o seu uso para Back-end. O seu reconhecimento deve-se à sua rapidez, responsividade e escalabilidade.&lt;/p&gt;

&lt;h4&gt;
  
  
  Como foi feito?
&lt;/h4&gt;

&lt;p&gt;O Node foi construído com base no motor, desenvolvido e usado pelo Google Chrome, que executa javascript no browser, chamado V8 engine.&lt;/p&gt;

&lt;p&gt;O V8 compila javascript em tempo de execução (compilação just-in-time) ao invés de interpretá-la. Isso, junto a uma série de outras características desse motor, acaba deixando a execução mais rápida.&lt;/p&gt;

&lt;h4&gt;
  
  
  Como funciona?
&lt;/h4&gt;

&lt;p&gt;Ao pesquisar sobre Node.js você pode se deparar com termos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Orientação a eventos&lt;/li&gt;
&lt;li&gt;Single-thread&lt;/li&gt;
&lt;li&gt;Event Loop&lt;/li&gt;
&lt;li&gt;Assíncrono&lt;/li&gt;
&lt;li&gt;I/O não bloqueante&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para explicar seu funcionamento e os termos acima, iremos expor a, comumente usada, analogia do restaurante.&lt;/p&gt;

&lt;p&gt;Fazendo um paralelo de uma aplicação com um restaurante, os clientes seriam os usuários e seus pedidos seriam as requisições feitas. Sendo a cozinha o equivalente ao Back-end.&lt;/p&gt;

&lt;p&gt;O comportamento dos garçons é o que será estudado conforme as características do Node.&lt;/p&gt;

&lt;p&gt;Node.js opera com uma única thread (&lt;strong&gt;single-thread&lt;/strong&gt;), designada como &lt;strong&gt;event-loop&lt;/strong&gt;, que age de forma &lt;strong&gt;orientada a eventos&lt;/strong&gt;. Em contrapartida, temos a abordagem thread-based, que funciona com múltiplas threads. No restaurante single-threaded existe somente um garçom e no multi-threaded, vários.&lt;/p&gt;

&lt;p&gt;Mas como um restaurante com menos garçons vai realizar pedidos mais rapidamente?&lt;/p&gt;

&lt;p&gt;Isso acontece por causa do comportamento de &lt;strong&gt;I/O não bloqueante&lt;/strong&gt; que faz com que a cozinha atue de forma &lt;strong&gt;assíncrona&lt;/strong&gt; dos garçons. Essa prática difere do modelo thread-based, onde cada garçom, ao fazer o pedido, deve esperar o prato ficar pronto para retornar o pedido à mesa e poder atender outro cliente. Considerando esse último modelo, um restaurante com X garçons e 1000X clientes teria um atendimento extremamente lento. Já o modelo com single-thread se mantém rápido e eficiente com muitos clientes, mesmo com só um garçom, ou seja, mesmo exigindo menos hardware. E é por isso que o uso de Node.js torna a aplicação altamente escalável.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hf207C55--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vu56r5x3kulmsqc540tb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hf207C55--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vu56r5x3kulmsqc540tb.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como o restaurnte da analogia funcionaria. Esquerda: com Node; Direita: abordagem thread-based.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consideração final
&lt;/h2&gt;

&lt;p&gt;Então concluímos que Node.js é a melhor forma de programar um aplicativo web?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Não necessariamente.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Em uma aplicação com um grande volume de requisições, Node pode ser a melhor pedida, mas num aplicativo cujas requisições exigem mais do CPU, como manipulação de imagens e vídeos por exemplo, optar Node.js não seria a melhor saída. Para entender melhor, imagine que no exemplo do restaurante, o tempo necessário para anotar o pedido de cada cliente seja maior que o tempo do prato ser preparado. Desse modo, a abordagem thread-based seria mais rápida.&lt;/p&gt;

&lt;p&gt;Fontes:&lt;br&gt;
&lt;a href="http://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/"&gt;Dany York, 2011;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.stackpath.com/v8-javascript-engine/"&gt;StackPath, Robert Gibb, 2019;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=uVwtVBpw7RQ&amp;amp;list=PLTjRvDozrdlydy3uUBWZlLUTNpJSGGCEm"&gt;Programming with Mosh, 2018.&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>backend</category>
      <category>eventloop</category>
    </item>
  </channel>
</rss>
