Cache para uso com a Blazor WebAssembly e a Prendering Server. Evita/facilita o flash duplo inicialize a interface do usuário.
Esta é uma tentativa de resolver/aliviar o problema, onde o Blazor WebAssembly + Server Procendering nas páginas pode causar um "flash da interface do usuário".
O tempo que leva para buscar os dados pela segunda vez é o que faz com que a interface do usuário pisque.

Este pedaço de código adiciona um cache, que lida muito com o ImemoryCache (que é uma das maneiras sugeridas de resolver esse problema em primeiro lugar).
Embora, em vez de armazenar o cache no servidor (removendo assim, por exemplo, uma segunda viagem ao banco de dados), o cache é armazenado na página estática pré -renderizada.
Então, quando a página obtém uma segunda inicialização, o cache é carregado na página estática e os dados são puxados a partir daí. Isso impede completamente a viagem ao servidor, removendo a etapa assíncrona e reduzindo/removendo drasticamente a segunda fase de carregamento.
A biblioteca está disponível como um pacote NUGET para convienência, mas é tão pequeno que pode ser preferível apenas copiar os 2 arquivos em seu projeto.
Install-Package Flyingpie.Blazor.PrerenderCache
builder . Services
. AddScoped < IPrerenderCache , PrerenderCache > ( )
;< component type = " typeof(Flyingpie.Blazor.PrerenderCache.PrerenderCacheStore) " render-mode = " Static " />Observe que esse componente deve ser adicionado à parte inferior da página, para que seja carregada depois de todos os outros componentes.
Isso é para impedir que o componente renderize antes que todos os dados a serem cacheados estejam disponíveis no iPrenderCache.
[ Inject ]
public IPrerenderCache Cache { get ; set ; }
protected override async Task OnInitializedAsync ( )
{
// Original
// VM = await StashApiClient.GetPostsAsync();
// Cacheable
VM = await Cache . GetOrAdd ( nameof ( Articles ) , ( ) => StashApiClient . GetPostsAsync ( ) ) ;
}O primeiro argumento do getoradd-method é a chave do cache, que deve ser única na página.
Você pode ver o resultado do cache olhando para a fonte da página:
< script type =" text/javascript " >
window . prerenderCache = {
cache : { "Articles" : { "Limit" : 25 , "Offset" : 0 , "Count" : 4 , "Posts" : [ { "Id" : "37af5802-7ea4-4def-b090-5bd4ebf4dabc" , ... } ] } } ,
load : ( ) => window . prerenderCache . cache
} ;
</ script >