Notas de leitura intensivas "Programação assíncrona JavaScript"
Others
2020-04-16 01:52:13
views: null
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.
Origin www.cnblogs.com/yzsunlei/p/12709843.html