|
|
Publicado em 30/07/2018 10:30:45
|
|
|

Introdução
O modo flyweight suporta efetivamente um grande número de objetos detalhados ao rodar tecnologia de compartilhamento, evitando a sobrecarga de um grande número de pequenas classes com o mesmo conteúdo (como consumir memória) e permitindo que todos compartilhem uma classe (meta-classe).
Em programação, às vezes é necessário produzir um grande número de instâncias de classes detalhadas para representar dados, e se você conseguir perceber que essas instâncias têm basicamente o mesmo overhead, exceto por alguns parâmetros, o número de classes que precisam ser instanciadas pode ser bastante reduzido. Se você conseguir mover esses parâmetros para fora da instância de classe e passá-los quando o método for chamado, pode reduzir muito o número de instâncias individuais compartilhando.
E daí se você aplicar o modo meta em JavaScript? Existem duas formas: a primeira é aplicada à camada de dados, principalmente a um grande número de objetos semelhantes na memória; A segunda é aplicada à camada DOM, que pode ser usada no gerenciador central de eventos para evitar anexar handles de evento a cada elemento filho no contêiner pai.
Aproveite o metaverso e as camadas de dados
Existem dois conceitos importantes no Flyweight – estado interno intrínseco e estado externo extrínseco, estado interno gerenciado no objeto por métodos internos, e informações externas podem ser excluídas ou salvas externamente.
Para ser direto, é primeiro pinçar um modelo original, depois em diferentes ocasiões e ambientes, e então produzir modelos específicos com suas próprias características; obviamente, diferentes objetos novos precisam ser gerados aqui, então o modo fábrica frequentemente aparece no modo Flyweight, o estado interno do Flyweight é usado para compartilhar, e a fábrica do Flyweight é responsável por manter um pool de Flyweight (pool de padrões) para armazenar os objetos do estado interno.
Use o modo Yuanyuan
Vamos demonstrar que, se tivéssemos uma biblioteca para gerenciar todos os livros, os metadados de cada livro seriam provisoriamente assim:
ID Título Autor Gênero Contagem de páginas ID da editora ISBN Também precisamos definir quando e por quem cada livro foi emprestado, assim como a data de devolução e disponibilidade:
Data de finalização checkoutMembro DueReturnDate Disponibilidade Como o objeto livro está definido com o seguinte código, observe que o código ainda não foi otimizado:
O programa pode funcionar bem no começo, mas com o tempo, o número de livros pode aumentar em grandes quantidades, e cada livro tem uma versão e quantidade diferentes, e você vai perceber que o sistema está ficando cada vez mais lento. Milhares de objetos livros na memória podem ser imaginados, e precisamos otimizá-los com o modo de compartilhamento.
Podemos dividir os dados em dois tipos de dados: internos e externos, e os dados relacionados ao objeto do livro (título, autor, etc.) podem ser atribuídos a atributos internos, enquanto (checkoutMember, dueReturnDate, etc.) podem ser atribuídos a atributos externos. Dessa forma, o código a seguir pode compartilhar o mesmo objeto no mesmo livro, porque não importa quem empreste o livro, desde que o livro seja o mesmo livro, a informação básica é a mesma:
Defina a fábrica básica
Vamos definir uma fábrica básica para verificar se o objeto do livro foi criado antes, retornar se houver, e recriá-lo e armazená-lo se não, o que garante que só criemos um objeto para cada tipo de livro:
Gerencie o status externo
O estado externo é relativamente simples, exceto pelo livro que encapsulamos, todo o resto precisa ser gerenciado aqui:
Dessa forma, podemos salvar as mesmas informações do mesmo livro em um objeto bookmanager, e apenas uma cópia; Comparado ao código anterior, pode-se constatar que muita memória é salva.
Aproveite o modo meta e o DOM
Não vou falar muito sobre o incidente do borbulhamento do DOM aqui, acredito que todo mundo já sabe, vamos dar dois exemplos.
Exemplo 1: Gerenciamento Centralizado de Incidentes Por exemplo, se tivermos muitos tipos semelhantes de elementos ou estruturas (como menus, ou múltiplos li em ul) que precisam monitorar o evento de clique dele, então precisamos vincular cada elemento adicional para vinculação de eventos; se houver muitos, muitos elementos, então o desempenho pode ser imaginado, e combinado com o conhecimento do bubbling, se qualquer elemento filho tiver um gatilho de evento, o evento vai evoluir para o elemento superior após o disparo, então, usando esse recurso, podemos usar o modo Xiangyuan. Podemos monitorar os eventos dos elementos pais desses elementos semelhantes e então determinar qual elemento filho tem um evento acionado antes de prosseguir com operações adicionais.
Aqui vamos combinar os métodos bind/unbind do jQuery como exemplo.
HTML:
JavaScript:
Exemplo 2: Aplicar o modo Xiangyuan para melhorar o desempenho
Outro exemplo, ainda relacionado ao jQuery, geralmente usamos o objeto elemento na função de callback do evento, frequentemente usamos a forma $(this), na verdade, ela cria repetidamente um novo objeto, porque esta na função de callback já é o elemento DOM em si, devemos usar o seguinte código:
Na verdade, se tivermos que usar algo como $(this), também podemos implementar nossa própria versão do padrão de instância única, por exemplo, podemos implementar uma função como jQuery.signle(this) para retornar o próprio elemento DOM:
Como usar:
Isso retorna o próprio elemento DOM como está, sem criar um objeto jQuery.
resumo
O modo flyweight é um modo que melhora a eficiência e o desempenho do programa, o que acelera muito a velocidade de execução do programa. Existem muitas aplicações: por exemplo, se você quiser ler uma série de cadeias de um banco de dados, muitas das quais são duplicadas, podemos armazenar essas cadeias em um pool Flyweight.
Se uma aplicação usa um grande número de objetos, e esse grande número causa muita satisfação no armazenamento, ela deve considerar o uso do modo compartilhamento; Se você excluir o estado externo do objeto, pode substituir muitos grupos de objetos por relativamente poucos objetos compartilhados, e pode considerar usar o modo Xiangyuan.
Endereço de referência:http://www.addyosmani.com/resour ... ok/#detailflyweight
|
Anterior:Recomendo 3 sites para encontrar ícones de íconesPróximo:NúmeroDeMensagensPendentes, MensagensEnfileiradas, Mensagens...
|