Análise de carregamento de subaplicativo de spa único de estrutura de micro front-end

Autor: JD Logística Ning Chong

1. Introdução

O que são micro frontends?
Micro frontends são microsserviços que vivem no navegador.

Este artigo analisa principalmente a biblioteca de funções single-spa-vue do subaplicativo de carregamento do aplicativo base single-spa da estrutura micro front-end e usa a análise de dimensão de código para permitir que todos entendam o que é feito quando o spa único carrega o subaplicativo. Como manter o estado dos subaplicativos otimizando a biblioteca de funções single-spa-vue.

Como a análise é realizada na dimensão do código, os leitores precisam ter um certo entendimento do spa único e o efeito da leitura será melhor.

2 O processo de subaplicações de carregamento de spa único

A configuração do subaplicativo de carregamento configurada no aplicativo base inserirá os subaplicativos chunk-vendors.js e app.js na página no método app de configuração do objeto subaplicativo e executará os dois subaplicativos chunk- vendors.js e app.js O js do qual o aplicativo depende.

Depois que o método app é executado, o js do qual o subaplicativo depende é inserido na estrutura do dom após a página.

A partir do processo de execução do método app acima, podemos ver que o aplicativo base carrega subaplicativos, o que é semelhante à maneira como o framework vue carrega os recursos js após o empacotamento. Então, por que você só precisa carregar o app.js e o chunk-vendors.js do subaplicativo para renderizar o subaplicativo na página. A seguir, vamos dar uma olhada em como o método main.js do arquivo de entrada do subaplicativo é configurado.

3 Configuração no main.js da sub-aplicação

No main.js da subaplicação, podemos ver que a configuração convencional 1 é substituída pelo formato da configuração 2.

Na configuração 2, passaremos a configuração vue atual para a biblioteca de funções single-spa-vue. Incluindo el, método render, objeto Vue. Por meio do empacotamento de singleSpaVue, retorne os métodos de ciclo de vida de spa único bootstrap, mount e unmount.

  • bootstrap: função bootstrap, que é chamada antes de o conteúdo da aplicação ser montado na página pela primeira vez, e será executada apenas uma vez.
  • mount: Função de montagem, que será executada toda vez que a sub-aplicação for montada.
  • unmount: função desmontar, que será executada toda vez que o sub-aplicativo for desinstalado.

Ou seja, quando o aplicativo base carrega subaplicativos, ele usa a função single-spa-vue para gerar cada ciclo de vida do single-spa, que é chamado pelo aplicativo base ao carregar subaplicativos.
Vamos dar uma olhada em como o single-spa-vue gera várias funções de ciclo de vida.

4 estrutura de código-fonte single-spa-vue

A biblioteca de funções single-spa-vue pode nos ajudar a gerar o ciclo de vida do carregamento de subaplicativos. Você pode baixar o código-fonte da biblioteca de funções single-spa-vue através do seguinte link: endereço GIT single-spa-vue.
O código fonte do single-spa-vue é muito simples, existem apenas algumas funções que geram o ciclo de vida do single-spa.

  • método single-spa-vue: o único método que a biblioteca de funções single-spa-vue fornece serviços externos para receber itens de configuração e retornar um objeto contendo cada ciclo de vida de spa único.
  • Outros métodos em inicialização, montagem, atualização e desmontagem de spa-vue único são métodos usados ​​para gerar funções de ciclo de vida correspondentes de spa único.

Vamos apresentar a função e a implementação desses métodos em detalhes.

5 análises de código-fonte single-spa-vue

O método singleSpaVue fornecido em single-spa-vue receberá informações de configuração userOpts e as informações de configuração serão mescladas com o item de configuração padrão defaultOpts antes do processamento subsequente.

5.1 Item de configuração defaultOpts

Para os itens de configuração padrão, existem os seguintes itens: Aqui apresentamos apenas os itens necessários, appOptions, Vue/createApp. O modelo nele não é usado em single-spa-vue, mas é usado em single-spa-html.

// 默认配置项列表

const defaultOpts = {

// required opts

appOptions: null,

template: null,

// sometimes require opts

Vue: null,

createApp: null,

handleInstance: null

}

1) Introdução aos itens de configuração do appOptions

  • appOptions: Os itens de configuração do aplicativo serão passados ​​como parâmetros para o método Vue quando a instância Vue for inicializada. Os itens de configuração em appOptions serão apresentados em detalhes abaixo.
  • el: O dom base que o subaplicativo precisa montar, ou seja, o dom que o vue precisa montar.
  • render/template: item de configuração do render/template do vue.
  • data: O objeto de parâmetro inicializado será montado diretamente na instância vue quando a função mount mount for executada.

2) Introdução aos itens de configuração do Vue/createApp

O item de configuração Vue/createApp é usado para gerar uma instância Vue, e a biblioteca de funções single-spa-vue pode gerar uma instância Vue no método mount por meio do objeto Vue recebido. Você também pode passar o método createApp e o subaplicativo retorna a instância Vue no método createApp.

Abaixo veremos o papel desses itens de configuração no método de geração do ciclo de vida

5.2 Método de inscrição: singleSpaVue

O método singleSpaVue executará primeiro as seguintes verificações de validade nos parâmetros de entrada e as verificações específicas incluem os quatro itens a seguir.

  1. Se o item de configuração userOpts é um objeto.
  2. Se a configuração Vue/createApp usada para criar uma instância vue existe.
  3. Se o item de configuração appOptions usado para gerar a instância vue existe.
  4. Se o dom montado pela instância vue está correto, verifique a validade do appOptions.el.

Depois que a verificação de validade for aprovada, os métodos bootstrap, mount, unmount e update serão chamados para gerar as funções de ciclo de vida do subaplicativo de carregamento de spa único, respectivamente.
O seguinte descreve em detalhes como cada função de ciclo de vida é gerada.

5.3 Função Bootstrap: bootstrap

A função bootstrap bootstrap é chamada quando o conteúdo do aplicativo é montado pela primeira vez na página.

A função bootstrap determinará primeiro se loadRootComponent existe no item de configuração. O autor entende que o item de configuração loadRootComponent pode ser usado para carregar o aplicativo pai ou outros recursos dependentes dos quais o subaplicativo atual depende.
Por exemplo, a página A depende do componente B. Ao carregar a página A, você pode carregar os recursos estáticos do componente B no método loadRootComponent e renderizá-los na página. A página A pode usar diretamente alguns recursos ou domínios fornecidos pelo componente B.
Se loadRootComponent não estiver configurado, ele retornará diretamente sem nenhum processamento.

5.4 Ciclo de vida da montagem do subaplicativo: montagem

Sempre que o subaplicativo é montado na página, o single-spa executa a função de ciclo de vida de montagem, o single-spa-vue é usado na função de montagem para inicializar a instância vue do subaplicativo e montar a instância para a página. A função de montagem receberá três parâmetros, que são as opções de parâmetro passadas por singleSpaVue, a lista de instâncias de subaplicativos atualmente montadas globalmente por single-spa-vue MountedInstances e as props de instância de spa único props
do subaplicativo atual registrado no aplicativo base
Insira os dados recebidos, apenas o atributo name de props é usado aqui para identificar o subaplicativo atualmente montado.

No método mount, as seguintes coisas são feitas principalmente

1) Formate o item de configuração do aplicativo appOptions

O método mount usará o método resolveAppOptions para formatar o item de configuração appOptions do aplicativo.
No método resolveAppOptions, se appOptions for um método, execute o método e passe as props de parâmetro transmitidas pelo aplicativo base por meio do parâmetro customProps.
A subaplicação pode obter os parâmetros passados ​​pela aplicação pai no método appOptions, e realizar diferentes processamentos de acordo com o estado da aplicação pai.

2) Inicialize o objeto DOM que o subaplicativo precisa montar.

Existem muitas configurações e métodos para inicializar o dom, e el será obtido de muitos itens de configuração. O código é relativamente simples, então não vou entrar em detalhes aqui. Apenas a prioridade do valor é listada para sua referência.
appOptions.el > props.domElement > props.name

Depois que o nó dom é formatado, o seguinte começa a montar a página no dom.

3) Crie um exemplo vue e monte-o na página

Antes de carregar a página, haverá um item de configuração: replaceMode, o item de configuração replaceMode é usado para identificar se o conteúdo sob o nó el precisa ser substituído. Se o replaceMode padrão for false, um div em branco com a classe single-spa-container será criado no nó el para salvar o subaplicativo.

Tome o código na demonstração como um exemplo:

Quando o replaceMode padrão for false, o conteúdo na base e o conteúdo no vue1 coexistirão. Como mostrado abaixo:

Se você alterar replaceMode para true, descobrirá que o conteúdo na base será substituído pelo conteúdo em vue1.
Como mostrado abaixo:

Depois de definir o método de montagem, comece a montar o subaplicativo no dom.
Dois métodos de montagem são suportados aqui, um é montar usando o método createApp de vue3 e o outro é montar usando o novo método Vue de vue2. O método de montagem aqui é realmente o mesmo que nossa configuração de usar vue para montar no dom.

Através das etapas acima, o subaplicativo agora está montado no dom na página html.

5.5 Função do ciclo de vida da atualização: atualizar

Quando parcela.update() é chamado, o método update será acionado.Como o autor não usa o recurso avançado parcela, não vou apresentá-lo aqui.

5.6 Ciclo de vida de desinstalação do subaplicativo: desmontar

Quando o URL da página for alterado, o método unmount será acionado ao sair da rota da página do subaplicativo.
As principais coisas a fazer no método unmount são:

  1. Desinstalar o aplicativo vue
  2. excluir instância vue
  3. Ao mesmo tempo, limpe o page dom.

Depois de executar a operação de desmontagem, os dados e domínio do subaplicativo serão apagados.

5.7 Resumo

O descrito acima é todo o processo de montagem de subaplicativos com a biblioteca de funções single-spa-vue fornecida oficialmente pelo single-spa. Por meio da análise acima, descobrimos que a biblioteca de funções single-spa-vue retornará um objeto contendo quatro métodos de bootstrap, mount, update e unmount chamando o método singleSpaVue. O método correspondente será executado no ciclo de vida de carregamento de subaplicativos no aplicativo base, e o subaplicativo é montado no aplicativo base ou destruído do aplicativo base por meio do método de execução.

Por meio do processo de carregamento de subaplicativos no single-spa-vue, o single-spa monta cada subaplicativo em um aplicativo complexo e gerencia cada subaplicativo separadamente sem o conhecimento do usuário.

Quando o single-spa carrega subaplicativos, existem outras versões além da versão vue, mas a ideia de carregamento é semelhante. Eles são todos carregados no html na biblioteca de funções, e nenhum outro será introduzido aqui.
single-spa Outras maneiras de carregar subaplicativos: single-spa-react, single-spa-html

6 Retenção do estado do subaplicativo

No processo de desenvolvimento real, o autor encontrou algumas páginas que precisam usar keep-alive em vue para preservar o estado. Embora a página seja destruída durante o processo de troca de página, o estado da página precisa ser preservado, mas estamos analisando single- spa-vue Quando o método unmount é implementado, descobre-se que, se a página for trocada, o subaplicativo e a instância vue são destruídos, e o keep-alive no subaplicativo não tem efeito neste momento.

Como mostrado abaixo:

Depois de inserir o conteúdo na entrada, o projeto de spa tradicional pode registrar o status por meio de keep-alive e, quando a rota da página é alternada, voltar e ainda manter o status. Mas se você usar single-spa-vue diretamente, o conteúdo de entrada 1111 em input será limpo quando o subaplicativo disparar a desmontagem. Em resposta a esta situação, o autor fez algumas modificações na biblioteca de classes single-spa-vue.

O conteúdo da modificação é o seguinte:

6.1 Subaplicativo alterado de destruído para oculto

Um item de configuração é adicionado ao item de configuração single-spa-vue.De acordo com a existência de um item de configuração isKeepAlive no item de configuração, é julgado se deve ocultar o dom atual ou excluí-lo. Dessa forma, quando o método unmount do subaplicativo é acionado, o subaplicativo não é excluído, mas permanece.

Ao mesmo tempo, o autor também fez algumas otimizações na configuração da rota do vue. Quando a página não existir, um componente vazio no subaplicativo será montado no dom neste momento, para evitar que, embora a página está oculta, o dom ainda está no html , resultando em muito page dom.

6.2 Subaplicativo alterado de novo para display

Quando o método mount é chamado no item de configuração single-spa-vue para montar o subaplicativo, ele julgará se o subaplicativo atual existe. Se o subaplicativo existir, a subpágina será exibida diretamente. Desde o subaplicativo não foi destruído, neste momento o subaplicativo O keep-alive no aplicativo sempre terá efeito e salvará o estado da página.

Através da otimização dos métodos mount e unmount da biblioteca de classe single-spa-vue, o usuário pode realmente usar a página tão suavemente quanto usar vue e pode manter o estado da página para melhorar a experiência do usuário.

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/4090830/blog/8591396
おすすめ