
O Node.js é um tempo de execução JavaScript. O que isso significa e como funciona?
O ambiente Node.js inclui tudo o que você precisa para executar um programa escrito em JavaScript.

Anteriormente, era possível executar o JavaScript apenas em um navegador, mas depois que os desenvolvedores o expandiam, agora você pode executar o JS no seu computador como um aplicativo independente. Então havia Node.js.
Agora você pode fazer muito mais com JavaScript do que apenas sites interativos.
O JavaScript agora tem a capacidade de fazer o que outras linguagens de programação de script, como Python, podem fazer.
JavaScript e Node.js baseados em navegador são executados no tempo de execução da V8. Esse mecanismo usa seu código JS e o converte em código de máquina mais rápido. Código de máquina é um código de baixo nível que um computador pode executar sem ter que interpretá-lo primeiro.
Por que Node.js?
Aqui está a definição formal dada no site oficial do Node.js.
- Node.js - tempo de execução do JavaScript baseado no mecanismo JavaScript V8 do Chrome.
- O Node.js usa um modelo de E / S sem bloqueio, orientado a eventos, que o torna fácil e eficiente.
- O ecossistema de pacotes Node.js., npm, é o maior ecossistema de bibliotecas de código aberto do mundo.
Já discutimos a primeira linha desta definição: "O Node.js é um tempo de execução JavaScript baseado no mecanismo JavaScript V8 do Chrome". Agora, vejamos as outras duas linhas, para que possamos entender por que o Node.js é tão popular.
E / S significa entrada / saída. Pode ser qualquer coisa: da leitura / gravação de arquivos locais a uma solicitação HTTP na API. A E / S leva tempo e, portanto, bloqueia outras funções.
Considere um cenário em que solicitamos usuário1 e usuário2 do back-end e, em seguida, imprima-os na tela / no console. A resposta a essa solicitação leva tempo, mas as duas solicitações de dados do usuário podem ser executadas independentemente e ao mesmo tempo.

Bloqueio de entrada e saída
No método de bloqueio, a solicitação de dados do usuário2 não é acionada até que os dados do usuário1 sejam impressos na tela.
Se fosse um servidor web, precisaríamos iniciar um novo thread para cada novo usuário. Mas o JavaScript é de thread único (mas possui um loop de evento de thread único, sobre o qual falaremos mais adiante). Portanto, isso tornará o JavaScript não muito adequado para tarefas multithread.
E / S sem bloqueio
Por outro lado, usando uma solicitação sem bloqueio, você pode iniciar uma solicitação de dados para o usuário2 sem aguardar uma resposta à solicitação do usuário1. Você pode iniciar os dois pedidos em paralelo.
A E / S sem bloqueio elimina a necessidade de multithreading porque o servidor pode lidar com várias solicitações ao mesmo tempo.
Loop de evento JavaScript
Se você tiver 26 minutos, confira a excelente explicação em vídeo Node Event Loop:
Caso contrário, eis uma explicação passo a passo de como o Loop de Eventos funciona em JavaScript:

1. Envie main () para a pilha de chamadas.
2. Envie console.log () para a pilha de chamadas. Começa imediatamente e aparece.
3. Envie setTimeout (2000) para a pilha. setTimeout (2000) é a API do Nó. Quando chamamos, registramos um par de eventos de retorno de chamada. O evento aguardará 2.000 milissegundos e chamará um retorno de chamada.
4. Após o registro, setTimeout (2000) aparece na pilha de chamadas.
5. Agora, o segundo setTimeout (0) é registrado da mesma maneira. Agora temos duas APIs de nó aguardando execução.
6. Depois de esperar 0 segundos, setTimeout (0) move-se para a fila de retorno de chamada, e o mesmo ocorre com setTimeout (2000).
7. Na fila de execução de retorno de chamada, as funções esperam que a pilha de chamadas fique vazia, porque apenas uma função pode ser executada por vez. Isso fornece um loop de eventos.
8. O último console.log () é chamado e main () é chamado da pilha de chamadas.
9. O loop de eventos vê que a pilha de chamadas está vazia, mas a fila de retorno de chamada não. Assim, move retornos de chamada (em ordem) para a pilha de chamadas a ser executada.
Npm

Essas são bibliotecas criadas pela comunidade. Eles resolverão os problemas mais comuns. O npm (Node Package Manager) contém pacotes que você pode usar em seus aplicativos para tornar seu desenvolvimento mais rápido e eficiente.
Exigir
Exigir tem três funções:
Carrega os módulos fornecidos com o Node.js., por exemplo, do sistema de arquivos ou HTTP, da API do Node.js.
Carrega bibliotecas de terceiros, como Express e Mongoose, instaladas a partir do npm.
Permite criar seus próprios arquivos e dividir o projeto em módulos.
Exigir é uma função e usa um parâmetro de caminho e retorna module.exports.
Módulos de nó
Módulos de nó são blocos de código reutilizáveis cuja existência não afeta acidentalmente outro código.
Você pode escrever seus próprios módulos e usá-los em vários aplicativos. O Node.js possui um conjunto de módulos internos que você pode usar sem instalação especial.
V8 acelera o JavaScript usando C ++
V8 é um mecanismo de código aberto escrito em C ++.
JavaScript -> V8 (C ++) -> código de máquina
A V8 implementa o ECMAScript conforme especificado em ECMA-262. O ECMAScript foi criado pela Ecma International para padronizar o JavaScript.
O V8 pode funcionar de forma autônoma ou pode ser integrado a qualquer aplicativo C ++. Graças a isso, você pode escrever seu próprio código C ++ e disponibilizá-lo para JavaScript.
Eventos
Eventos são tudo o que aconteceu em nosso aplicativo e o que podemos responder.
O nó possui dois tipos de eventos:
- Eventos do sistema: kernel C ++ da biblioteca libuv. (Por exemplo, terminando a leitura de um arquivo).
- Eventos personalizados: núcleo do JavaScript.
Escrevendo Hello World no Node.js
Porque não
Crie o arquivo app.js e adicione o seguinte.
console.log ("Hello World!");
Abra um terminal Nó, altere o diretório para a pasta na qual o arquivo está salvo e execute o nó app.js.
Voila - você acabou de escrever "Hello World" no Node.js.
Há
muitos recursos que você pode usar para aprender mais sobre o Node.js, incluindo o
freeCodeCamp.org.