Conceitos básicos
Node.js , ou nó, é uma plataforma que permite que JavaScript seja executado no lado do servidor. Pode -se dizer que Node.js foi pioneiro no desenvolvimento modular do javascript . Os requisitos iniciais javascript eram muito simples e foram basicamente escritos como funções, seguidos por uma escrita orientada para o processo. Posteriormente, as idéias de desenvolvimento orientadas a objetos foram gradualmente introduzidas e depois foram lentamente escritas em aulas. Finalmente, o surgimento do Node.js começou a ter o conceito de desenvolvimento modular JS, que eliminou o código js inchado, como conflitos de nomeação e outros problemas de desenvolvimento.
A maior característica Node é a adoção de I/O assíncrona e design arquitetônico orientado a eventos. Node.js é uma plataforma que permite que o JS funcione fora do navegador. Seu objetivo inicial é implementar servidores de I/O sem bloqueio de eventos e não bloqueadores
Node.js é apenas um ambiente de execução JavaScript (ou um conjunto de bibliotecas), que complementa o js padrão com as funções de IO assíncrono, isto é, lendo e escrevendo redes e arquivos.
Como biblioteca, nada mais é do que uma API de música. Além de retornos de chamada de eventos ligeiramente anti-humanos, não é muito diferente de outros idiomas de back-end (PHP, Python).
Node.js usa um único modo de encadeamento. Cada encadeamento completa uma função. Um processo pode ter vários threads. Todos os I/S são usados em um método de solicitação assíncrona. Após a conclusão de cada solicitação de E/S assíncrona, ela será empurrada para a fila de eventos e aguardará o processo do processo do programa.
Em suma, a idéia central do node é: não bloqueando, thread único e orientado a eventos. (Síncrono corresponde ao bloqueio, o assíncrono corresponde a não bloquear)
Diagrama de arquitetura Node.JS
Único rosqueado
O ambiente de execução da linguagem javascript é "Thread Single Thread".
O chamado "Thread" significa que uma tarefa só pode ser concluída por vez. Se houver várias tarefas, você deverá fazer fila, concluir a tarefa anterior, executar a próxima tarefa e assim por diante.
A vantagem desse modelo é que ele é relativamente simples de implementar e o ambiente de execução é relativamente simples; A desvantagem é que, enquanto houver uma tarefa que demore muito tempo, as tarefas subsequentes devem ser filmadas, o que atrasará a execução de todo o programa. Os navegadores comuns não respondem (morte falsa) frequentemente porque uma certa peça de código Javascript é executada por um longo tempo (como um loop morto), fazendo com que a página inteira fique presa neste local e outras tarefas não podem ser executadas.
Os gargalos da maioria dos aplicativos da Web estão em I/O , isto é, lê e grava discos, lê e grava redes e leia e grava bancos de dados. Que estratégia usar para esperar por esse período de tempo se tornou o ponto -chave para melhorar o desempenho
Síncrono e assíncrono
Para resolver esse problema, Javascript divide o modo de execução de tarefas em dois tipos: síncrono (síncrono) e assíncrono (assíncrono).
"Modo síncrono" é o modo da seção anterior. A última tarefa aguarda que a tarefa anterior termine e depois seja executada. A ordem de execução do programa é consistente e síncrona com a ordem de arranjo das tarefas; O "modo assíncrono" é completamente diferente. Cada tarefa possui uma ou mais funções de retorno de chamada ( callback ). Após o término da tarefa anterior, não é a próxima tarefa, mas a função de retorno de chamada é executada. A última tarefa é executada sem esperar que a tarefa anterior termine; portanto, a ordem de execução do programa é inconsistente e assíncrona com a ordem de arranjo das tarefas.
"Modo assíncrono" é muito importante. No lado do navegador, as operações de longo prazo devem ser executadas de forma assíncrona para evitar que o navegador perca a resposta. O melhor exemplo são as operações do Ajax. No lado do servidor, "Modo assíncrono" é o único modo, porque o ambiente de execução é um único thread, se todas as solicitações http puderem ser executadas de maneira síncrona, o desempenho do servidor cairá acentuadamente e em breve perderá sua resposta.
Processos e threads
Processos e tópicos no sistema MAC
A partir da figura, podemos ver que um processo pode incluir vários threads. Os processos são como oficinas em projetos. Os tópicos são trabalhadores neste workshop. No sistema operacional que introduz threads, eles geralmente usam processos como unidade básica para alocar recursos e threads como a unidade básica para operação independente e programação independente. Como os threads são menores que os processos e basicamente não possuem recursos do sistema, a sobrecarga da programação será muito menor, o que pode melhorar com mais eficiência o grau de execução simultânea entre vários programas no sistema.
a diferença
A diferença entre um encadeamento e um processo é que o processo filho e o processo pai têm diferentes espaços de código e dados, enquanto vários threads compartilham espaços de dados, cada encadeamento possui sua própria pilha de execução e contador de programas para seu contexto de execução. O multithreading é usado principalmente para salvar o tempo da CPU e usá -lo de acordo com a situação específica. Os recursos de memória e a CPU do computador devem ser usados durante a execução de um thread.
Módulos e módulos de embalagem
Módulo: um arquivo que implementa certas funções específicas para implementar a programação modular. Introduzir módulos através do requisito (nome do módulo).
- As funções nos módulos (como variáveis, funções) são fornecidas ao chamador, atribuindo uma propriedade ao objeto exports .
Como usar módulos?
É muito conveniente usar módulos no nó. No código JavaScript , você pode usar diretamente a função global require() para carregar um módulo. Por exemplo, podemos usar require("http") para carregar o módulo do servidor HTTP que vem com node .
Bolsa
Pacote: um pacote é uma pasta que encapsula módulos para liberação, atualização, gerenciamento de dependência e controle de versão. Descreva as informações do pacote através do package.json: arquivos de entrada, pacotes externos de dependência etc. Instale o pacote através do comando npm install e use o pacote através do require .
E/S assíncrona e orientado a eventos
O mecanismo assíncrono do Node.js é baseado em eventos. Cada I/O é uma solicitação. Todas I/O de disco, comunicação de rede e consultas de banco de dados são solicitadas de maneira não bloqueadora. Os resultados retornados são processados pelo loop do evento. Como mostrado na figura abaixo:
O processo Node.js processará apenas um evento ao mesmo tempo e inserirá imediatamente o loop do evento para verificar e processar os eventos subsequentes após a conclusão. A vantagem disso é que a CPU e a memória existem ao mesmo tempo para centralizar uma coisa, permitindo que as operações de E/S demoradas sejam executadas em paralelo o máximo possível
Inicie a programação do nó
Aqui, eu recomendo que você use webstorm para o desenvolvimento node.js , que é conveniente e rápido, e é muito mais fácil de usar do que CMD ou terminais no Mac.
Quanto à instalação do nó, por favor, Baidu por conta própria. Não vou entrar em detalhes aqui. Vamos dar uma olhada na interface de programação do nó em webstorm :
Só precisamos clicar com o botão direito do mou
A seguir, a interface de saída do nó:
No sistema Mac , recomendo as três ferramentas que eu uso: coda2, webstorm e sublime text3. Essas são as melhores ferramentas de desenvolvimento que tenho até agora. Você também pode tentar qual deles está mais alinhado com o seu gosto.
Para o desenvolvimento do nó no webstorm , você precisa configurar alguns arquivos primeiro. Todos devem usar o Baidu para fazê -lo. Como minha webstorm foi configurada, não posso tirar uma captura de tela para mostrar as etapas. As etapas gerais estão: no sistema MAC, clique primeiro com webstorm na barra superior, depois clique em perference , depois clique em Node.js and NPM , depois clique em Configurar no lado direito e, finalmente, parecerá o seguinte:
As etapas do processo no sistema windows são aproximadamente semelhantes a esse processo. A versão que eu uso é 8.0.4.
Variáveis globais
Na programação JS, é melhor adicionar a palavra -chave VAR a cada variável para evitar poluir o espaço para nome global e aumentar o risco de acoplamento de código.
console
console é usado para gerar caracteres para o standout padrão do fluxo de saída (STDOUT) e o fluxo de erros padrão (STDERR).
console.log() imprime os caracteres para o fluxo de saída padrão e termina com uma nova linha, que aceita vários parâmetros e será emitida no formato cike printf()
console.log(__dirname)输出文件目录Calcule o tempo de execução do código
console.time(label) console.timeEnd(label)Só precisamos dar o mesmo rótulo no início e no final e colocar qualquer código que você deseja calcular o tempo de execução no meio.
__filename e __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon