Node em Ação #1

Tempo de leitura: 3 min

Escrito por blackzig
em 31/07/2019

Bem Vindo ao Node.js

Node.js é um assíncrono, é uma funcionalidade que o JavaScript fornece em tempo de execução como uma biblioteca concisa. É mantida e fornecida pela Fundação Node.js. Há duas verões de Node: Long-Term Support(LTS) e a corrente. Se você quer saber mais sobre o Node, visite a documentação no site (https://nodejs.org/en/).

Desde que o Node.js apareceu em 2009, o JavaScript vem ganhando terreno na programação entre os desenvolvedores. Isto deve em grande parte a chegada do ECMAScript 2015, o qual resolveu vários problemas críticos da versão anterior. Node utiliza o Google’s V8 JavaScript engine, que é baseado na sexta edição do ECMAScript, o qual pode ser chamado de ES6 ou ES2015. Isto trouxe inovações tecnológica, tais como, Node, React e Electron, isto permitiu a utilização do JavaScript em qualquer lugar: do servidor ao navegador e aplicações nativas para mobiles. Mesmo grande companhias como a Microsoft estão utilizando o JavaScript e a Microsoft tem até contribuído com o sucesso do Node.

Uma Típica Aplicação Web Node

Uma das forças do Node e JavaScript é o modelo de programação single-threaded. Threads são fontes comuns de erro, embora algumas linguagens de programação mais atual, incluindo Go e Rust, estão tentando produzir ferramentas para proteger contra isto, o Node continua como o modelo utilizado no navegador. No código baseado no navegador, nós escrevemos uma sequência de instruções que executam uma por uma, o código não executa nada em paralelo. Os usuários comuns não entendem isto, contudo eles não suportam lentidões tais como: acessar a rede ou fazer um download de um arquivo. Os navegadores utilizam eventos, por exemplo, quando você clica em um botão, um evento é disparado e uma função é executada conforme foi definida antes, mas que ainda não foi executada. Isto evita alguma problemas encontrados na programação de threaded, incluindo resource deadlocks e race conditions.

Nonblocking I/O

O que significa em um contexto a programação server-side? A situação é similar a: requisições I/O tais como acesso a dico e rede que são comparativamente lentas, nós não queremos executar em tempo de execução a camada lógica de negócio enquanto lemos arquivos ou mandamos mensagem na rede. Para resolver isto, o Node usa três técnicas: eventos, APIs assíncronas e Nonblocking I/O. Nonblocking I/O é um termo de baixo nível do ponto de vista dos programadores do Node. Isto significa que o seu programa pode fazer um request para um recurso da rede enquanto faz outra coisa, e quando a operação da rede termina um callback irá mostrar o resultado.

A imagem mostra uma típica aplicação web Node que utiliza uma biblioteca de aplicações web chamada Express para manipular um fluxo de pedidos de uma loja. O navegador faz um request para comprar um produto, e a aplicação checa o estoque, cria uma conta para o usuário, envia o recibo por email e recebe uma resposta em JSON HTTP. Junto com isto, outras coisas também são executada: um email com recibo é enviado e o banco de dados é atualizado com os detalhes da compra do usuário. O código em si é simples, a maior parte feita em JavaScript, mas o que ocorre em tempo de execução utiliza o Nonblocking I/O.

O banco de dados é acessado pela rede. No Node, quem acessa a rede é o Nonblocking, porque o Node utiliza a biblioteca libuv(http://libuv.org/) para fornecer acesso ao sistema operacional do Nonblocking a rede. Esta implementação é diferente no Linux, macOs e Windows, mas não precisa se preocupar porque a biblioteca do JavaScript resolve isto. Enquanto você escreve um código como db.insert(query, err -> {}), o Node está fazendo uma otimização nos bastidores da rede Nonblocking.

O acesso a disco é similar, mas não é igual. Quando um recibo de email é gerado e o template do email é lido pelo disco, libuv utiliza uma thread pool para fornecer a ilusão que um Nonblocking estão sendo utilizado. Manipular uma thread pool não é tão divertido assim, mas escrever email.send(‘template.ejs’, (err, html) -> {}) é muito mais fácil de entender.

O benefício de utilizar APIs assíncronas com Nonblocking I/O é que o Node pode fazer outras coisas enquanto processos mais lentos são executados. Apesar de você está executando apenas um single-threaded, um single-process de um app web Node, pode-se manipular mais do que uma conexão e potencialmente milhares de visitantes de uma vez em um site. Para entender isto você deve dar uma olhada no event loop.

Node.js in Action, Second Edition

https://amzn.to/2LP5AWx

#node

Você vai gostar também:

Para enviar seu comentário, preencha os campos abaixo:

Deixe um comentário


*


*


Seja o primeiro a comentar!

Damos valor à sua privacidade

Nós e os nossos parceiros armazenamos ou acedemos a informações dos dispositivos, tais como cookies, e processamos dados pessoais, tais como identificadores exclusivos e informações padrão enviadas pelos dispositivos, para as finalidades descritas abaixo. Poderá clicar para consentir o processamento por nossa parte e pela parte dos nossos parceiros para tais finalidades. Em alternativa, poderá clicar para recusar o consentimento, ou aceder a informações mais pormenorizadas e alterar as suas preferências antes de dar consentimento. As suas preferências serão aplicadas apenas a este website.

Cookies estritamente necessários

Estes cookies são necessários para que o website funcione e não podem ser desligados nos nossos sistemas. Normalmente, eles só são configurados em resposta a ações levadas a cabo por si e que correspondem a uma solicitação de serviços, tais como definir as suas preferências de privacidade, iniciar sessão ou preencher formulários. Pode configurar o seu navegador para bloquear ou alertá-lo(a) sobre esses cookies, mas algumas partes do website não funcionarão. Estes cookies não armazenam qualquer informação pessoal identificável.

Cookies de desempenho

Estes cookies permitem-nos contar visitas e fontes de tráfego, para que possamos medir e melhorar o desempenho do nosso website. Eles ajudam-nos a saber quais são as páginas mais e menos populares e a ver como os visitantes se movimentam pelo website. Todas as informações recolhidas por estes cookies são agregadas e, por conseguinte, anónimas. Se não permitir estes cookies, não saberemos quando visitou o nosso site.

Cookies de funcionalidade

Estes cookies permitem que o site forneça uma funcionalidade e personalização melhoradas. Podem ser estabelecidos por nós ou por fornecedores externos cujos serviços adicionámos às nossas páginas. Se não permitir estes cookies algumas destas funcionalidades, ou mesmo todas, podem não atuar corretamente.

Cookies de publicidade

Estes cookies podem ser estabelecidos através do nosso site pelos nossos parceiros de publicidade. Podem ser usados por essas empresas para construir um perfil sobre os seus interesses e mostrar-lhe anúncios relevantes em outros websites. Eles não armazenam diretamente informações pessoais, mas são baseados na identificação exclusiva do seu navegador e dispositivo de internet. Se não permitir estes cookies, terá menos publicidade direcionada.

Visite as nossas páginas de Políticas de privacidade e Termos e condições.

Importante: Este site faz uso de cookies que podem conter informações de rastreamento sobre os visitantes.
Criado por WP RGPD Pro

Aprenda a Criar e Programar Jogos Completos em 2D e 3D!

Seja um Desenvolvedor de Jogos Profissional