Notas de leitura intensivas "Programação assíncrona JavaScript"

Escreva na frente

  • Introdução do livro: Este livro descreve habilidades básicas de processamento assíncrono, incluindo PubSub, modo de evento, promessas etc., por meio dessas habilidades. Você pode lidar melhor com a complexidade de aplicativos Web em larga escala, código de resposta interativo e rápido. A compreensão do modo assíncrono do JavaScript permite que os leitores gravem programas JavaScript com estrutura mais razoável, melhor desempenho e manutenção mais fácil.

O Capítulo 1 tem uma compreensão profunda dos eventos JavaScript

1.1 Agendamento de eventos

  • O código JavaScript é usado para ser ininterrupto, porque o código precisa apenas enfileirar eventos durante o tempo de execução, e esses eventos não serão acionados antes do final do código.

1.2 Tipos de funções assíncronas

  • Cada ambiente JavaScript possui seu próprio conjunto de funções assíncronas
  • No lado do navegador, o método Ajax possui uma opção assíncrona que pode ser definida como false
  • Os métodos da API sincronizados no Node.js serão claramente marcados no nome, como fs.readFileSync
  • A impressão do console.log do WebKit não tira imediatamente um instantâneo do objeto, apenas uma referência ao objeto é armazenada e o instantâneo é impresso quando o código retorna à fila de eventos
  • O console.log do nó é estritamente sincronizado
  • Quando o mesmo processo JavaScript está executando o código, nenhuma função de tempo do JavaScript pode executar outro código
  • O evento de agendamento SetInterval é definido como 0, a frequência de acionamento do Chrome e outros navegadores é de cerca de 200 vezes / segundo, o nó é de cerca de 1000 vezes / segundo
  • Quando substituída por um loop while, a frequência do acionador no Chrome atingirá 4 milhões de vezes / segundo e atingirá 5 milhões de vezes / segundo no nó.
  • Precisa de um tempo mais refinado, use process.nextTick no nó e requestAnimationFrame em navegadores modernos (compatibilidade de ideias)

1.3 Escrita de funções assíncronas

  • A única maneira de confirmar se uma função é assíncrona ou não é revisar seu código-fonte
  • Algumas funções são assíncronas em alguns momentos, mas não em outros momentos
  • Uma grande quantidade de atraso causará uma enorme carga de cálculo
  • A recursão assíncrona é um pouco assustadora, pois enquanto aguarda a conclusão da tarefa, o número de atrasos que podem ser acionados é ilimitado
  • Nunca defina uma função potencialmente síncrona e cujo valor de retorno possa ser usado para retornos de chamada

1.4 Tratamento de erros assíncronos

  • JavaScript também permite que exceções sejam lançadas e subsequentemente capturadas com um bloco try / catch
  • Por esse motivo, os retornos de chamada no Node.js quase sempre aceitam um erro como seu primeiro parâmetro, o que permite que o retorno de chamada decida como tratar o próprio erro
  • Lembre-se sempre de que erros assíncronos originários do retorno de chamada só podem ser tratados dentro do retorno de chamada
  • No ambiente do navegador, o windows.onerror pode capturar exceções, se retornar verdadeiro, pode impedir o comportamento padrão de manipulação de erros do navegador.
  • No nó, o evento uncaughtException de um objeto de processo semelhante captura um erro.Em circunstâncias normais, o aplicativo do nó será encerrado imediatamente devido a uma exceção não capturada
  • Mas desde o Nó0.8.4, o evento uncaughtException foi abandonado
  • O objeto de domínio é um objeto de evento, que converte o lançamento em um evento de erro

1.5 Aninhando o aninhamento de retornos de chamada aninhados

  • A abordagem anti-padrão mais comum é aninhar retornos de chamada dentro de retornos de chamada
  • Os retornos de chamada aninhados nos levam a adicionar mais recursos adicionando mais código em vez de implementá-los como fragmentos de código gerenciáveis ​​e reutilizáveis
  • Por convenção, evite aninhar mais de dois níveis de funções

Capítulo 2 Eventos Distribuídos

  • Espero usar eventos distribuídos: a borboleta do evento ocasionalmente bate as asas e todo o aplicativo provoca reações em todos os lugares
  • PubSub significa modo de publicação / assinatura, para distribuir eventos
  • Algumas expressões específicas do modo PubSub: objeto EventEmitter do Node, modelo de evento do Backbone, evento personalizado do JQuery

2.1 Modo PubSub

  • Quase todas as E / S no Node são objetos EventEmitter: fluxos de arquivos, servidores HTTP e até o próprio processo do aplicativo
  • O manipulador de eventos em si não pode saber se está sendo executado na fila de eventos ou no código do aplicativo
  • Mantenha uma fila para coisas que não precisam acontecer imediatamente e use uma função de tempo para executar a próxima tarefa nesta fila regularmente
  • O PubSub simplifica a nomeação, distribuição e acumulação de eventos

2.2 Modelo de Evento

  • Desde que o objeto tenha uma interface PubSub, ele pode ser chamado de objeto de evento
  • Sempre que um evento em um objeto aciona uma série de eventos e, eventualmente, aciona o mesmo evento no próprio objeto, o resultado é um loop de eventos
  • O modelo baseado em eventos nos oferece uma maneira intuitiva de transformar alterações de estado de aplicativo em eventos

2.3 Evento customizado do JQuery

  • O jQuery simplifica a migração de um poderoso sistema de eventos distribuídos para qualquer aplicativo da web
  • O jQuery fornece um método triggerHandler sem bolhas
  • Os eventos personalizados do jQuery permitem que eventos relacionados ao DOM sejam expressos diretamente através do DOM, sem a necessidade de copiar o estado das alterações do DOM para outras partes do aplicativo.

Sumário

  • O modo PubSub não é particularmente adequado para eventos únicos
  • A ferramenta usada para resolver o evento único é chamada de Promessa

Capítulo 3 Prometer objetos e objetos adiados

3.1 Uma breve história de promessas

  • Os objetos Promise são os mesmos que os objetos EventEmitter, permitindo que qualquer número de processadores seja vinculado ao mesmo evento (tecnologia de empilhamento)
  • A maior vantagem do uso de objetos Promise é que você pode derivar facilmente novas promessas de objetos existentes do Promise
  • Em geral, as três palavras Promessa, Adiado e Futuro podem ser mais ou menos consideradas sinônimos.

3.2 Gerar objeto Promise

  • Para ser mais preciso, Deffered é um superconjunto de promessas, com mais um recurso importante que as promessas e pode ser acionado diretamente
  • Para reiterar: cada objeto adiado contém um objeto Promise e cada objeto Promise representa um objeto adiado
  • O Ajax é um ótimo caso de uso para demonstrar promessas: toda chamada para um servidor remoto é bem-sucedida ou falha, e queremos lidar com essas duas situações de maneiras diferentes

3.3 Passando dados para a função de retorno de chamada

  • Quando o objeto adiado é executado ou rejeitado, todos os parâmetros fornecidos serão encaminhados para o retorno de chamada correspondente
  • resolver / rejeitar pode passar diretamente seu contexto para o retorno de chamada acionado por ele mesmo

3.4 Notificação de progresso

  • Um novo progresso de retorno de chamada pode ser chamado para o objeto Promise no jQuery1.7
  • Em resumo, o objeto Promise aceita três formas de retorno de chamada: concluído, com falha, progresso

3.5 Mesclando objetos Promise

  • A técnica de mesclagem lógica dos objetos Promise possui um dos casos de uso mais comuns: determinar quando um conjunto de tarefas assíncronas é concluído

3.6 O pipeline conecta o futuro

  • O JavaScript geralmente não pode executar convenientemente uma série de tarefas assíncronas, um dos principais motivos é que é impossível conectar um processador à segunda tarefa antes do final da primeira tarefa
  • jQuery1.6 adiciona método de pipe ao objeto Promise
  • promessa.promise () === promessa

3.7 Comparação entre jQuery e Promises / A

  • O jQuery usa resolver como antônimo de falha, enquanto o Promise / A usa o preenchimento. Na especificação Promise / A, o objeto Promise é executado se foi cumprido ou falhou

3.8 Use objetos Promise em vez de funções de retorno de chamada

  • Idealmente, qualquer função que comece a executar uma tarefa assíncrona deve retornar um objeto Promise
  • As promessas ajudam muito a suavizar os retornos de chamada no estilo de massa e porque a Promise pode coordenar facilmente esse tipo de tarefa assíncrona

Capítulo 4 Controle de fluxo de trabalho do Async.js

4.1 A ordem do fluxo de trabalho assíncrono

  • O código assíncrono comum simplesmente não pode garantir que os retornos de chamada chamados sejam acionados na ordem em que são chamados

4.3 Tecnologia de organização de tarefas Async.js

  • O método de coleta de dados do Async.js resolve o problema de como uma função assíncrona é aplicada a um conjunto de dados
  • Execução da sequência de funções assíncronas: async.series e async.waterfall
  • É conveniente que o Async.js transmita os resultados para o processador de eventos de conclusão na ordem da lista de tarefas, e não na ordem em que esses resultados são gerados
  • O núcleo e a alma do Async.js: fornecem funções de ferramenta simples e que economizam tempo para os cenários assíncronos mais comuns

4.4 Tecnologia de enfileiramento dinâmico para fluxo de trabalho assíncrono

  • A idéia básica subjacente do async.queue é uma reminiscência das visualizações de gerenciamento dinâmico do DMV

Capítulo 5 Tecnologia multithreading de objetos de trabalho

5.0 Escreva na frente

  • Os eventos podem substituir um tipo especial de multi-threading, ou seja, o processo do aplicativo pode ser dividido em várias partes para executar simultaneamente na tecnologia de multi-threading (através da implementação virtual da tecnologia de interrupção ou através de vários núcleos da CPU)
  • Embora a execução em um encadeamento não seja ideal, distribuir aplicativos ingenuamente diretamente para vários núcleos é ainda pior
  • A maneira de interagir com diferentes threads é exatamente a mesma das operações de E / S em JavaScript
  • Vários threads no mesmo processo podem compartilhar estado, mas processos independentes um do outro não podem
  • Em um ambiente JavaScript, o código simultâneo executado por objetos de trabalho nunca compartilhará o estado

5.1 A versão web do objeto de trabalho

  • O objetivo principal é lidar com cálculos complexos sem comprometer a capacidade de resposta do DOM
  • Vários usos em potencial: decodificar vídeo, criptografar a comunicação, analisar o editor da web
  • Por razões semelhantes, o objeto de trabalho não pode ver o objeto de janela global e nenhum objeto do encadeamento principal e outros encadeamentos de trabalho
  • Os objetos enviados via postMessage serão serializados e desserializados de forma transparente, pense em JSON.parse e JSON.stringify
  • Objetos de trabalho podem usar XMLHttpRequest à vontade
  • Há também uma função importScripts que pode carregar e executar o script especificado de forma síncrona

5.2 Versão do nó dos trabalhadores trazidos pelo cluster

  • Após o node0.6, uma API que suporta vários processos vinculados à mesma porta é introduzida: cluster (cluster)
  • Geralmente, em busca do melhor desempenho, o cluster é usado para diferenciar um processo de acordo com cada núcleo da CPU
  • A versão do nó do objeto de trabalho é recarregada por cluster.fork () para executar o mesmo script que um processo independente.
  • O navegador pode fazer o downgrade de qualquer encadeamento extra para tarefas em segundo plano, e o servidor do nó deve reservar recursos de computação para garantir as principais tarefas do processamento de solicitações
  • A mágica mais famosa: quando vários objetos de trabalho tentam ouvir uma porta TCP, o nó usa mensagens internas para permitir o compartilhamento da porta
  • Da mesma forma, o objeto de cluster possui um encadeamento principal e vários encadeamentos de trabalho, com base em alguns eventos com objetos serializados ou seqüências anexadas
  • Para minimizar a sobrecarga de comunicação entre threads, o estado compartilhado entre threads deve ser armazenado em um banco de dados externo como Redis

Capítulo 6 Carregamento de Script Assíncrono

  • Os scripts precisam ser divididos e conquistados.Os scripts responsáveis ​​por tornar a página cada vez melhor devem ser carregados imediatamente e os que podem ser recarregados mais tarde serão carregados mais tarde.

6.1 Limitações e notas suplementares

  • Tente evitar o uso de tecnologia embutida
  • Não use document.write
  • Apenas saiba que document.write é equivalente à instrução GOTO ao manipular o DOM

6.2 Reconhecimento da etiqueta de script

  • As tags de script nos navegadores modernos são divididas em dois novos tipos: clássico e sem bloqueio
  • É popular colocar o script no final da etiqueta do corpo da página. Por um lado, os usuários podem ver a página mais rapidamente; por outro, podem tocar ativamente no DOM sem esperar que os eventos sejam acionados.
  • adiar nos lembra de um cenário de enfileiramento ordenado que espera silenciosamente o carregamento dos documentos, em seguida, o assíncrono nos lembra a anarquia caótica
  • Se um script usar adiamento e assíncrono, nos navegadores que o suportam ao mesmo tempo, o assíncrono substituirá o adiamento

6.3 Carregamento de script programável

  • Dois métodos razoáveis ​​para capturar e executar o script do servidor: gerar solicitação Ajax e usar a função eval para processar a resposta; inserir a tag do script no DOM
  • O poderoso kit de ferramentas do require.js pode suavizar automaticamente até o mais complexo gráfico de dependência de script com a tecnologia AMD
  • Se você precisar carregar scripts com base nas condições, considere um carregador de scripts como o yepnope. Se o site tiver muitos scripts interdependentes, considere require.js

Escreva na parte de trás

  • livros em pdf, mapas mentais de notas e endereço de download do código do pacote: https://pan.baidu.com/s/1WMzAciLMfTasiWFQjz4ftA (código de extração: wd01)
  • Livro de papel endereço de compra Jingdong: preencha mais tarde (recomendado usar livro de papel para aprender)
  • Para facilitar a visualização no celular, postarei essas notas na conta pública "Envie três facções quatro", você pode digitalizar o código a seguir, bem-vindo a seguir.
    Digitalize o código para seguir o número público

Acho que você gosta

Origin www.cnblogs.com/yzsunlei/p/12709843.html
Recomendado
Clasificación