Cache para usar con Blazor WebAssembly y el prevenimiento del servidor. Preventa/facilita el Flash de interfaz de usuario de doble inicialización.
Este es un intento de resolver/aliviar el problema, donde el reproducción del servidor Blazor WebAssembly + Server en las páginas puede causar un "Flash UI".
El tiempo que lleva obtener los datos por segunda vez es lo que hace que la interfaz de usuario flashee.

Esta pieza de código agrega un caché, que se maneja mucho como el ImemoryCache (que es una de las formas sugeridas de resolver este problema en primer lugar).
Sin embargo, en lugar de almacenar el caché en el servidor (eliminando así, por ejemplo, un segundo viaje a la base de datos), el caché se almacena en la página prerenderizada estática.
Luego, cuando la página obtiene una segunda inicialización, el caché se carga desde la página estática y los datos se extraen desde allí. Esto evita el viaje al servidor por completo, eliminando el paso Async y reduciendo/eliminando drásticamente la segunda fase de carga.
La biblioteca está disponible como un paquete NUGET para su convienencia, pero es tan pequeño que es preferible copiar los 2 archivos en su proyecto.
Install-Package Flyingpie.Blazor.PrerenderCache
builder . Services
. AddScoped < IPrerenderCache , PrerenderCache > ( )
;< component type = " typeof(Flyingpie.Blazor.PrerenderCache.PrerenderCacheStore) " render-mode = " Static " />Tenga en cuenta que este componente debe agregarse a la parte inferior de la página, por lo que se carga después de todos los otros componentes.
Esto es para evitar que el componente se repite antes de que todos los datos que se encuentran en caché están disponibles en IperenderCache.
[ 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 ( ) ) ;
}El primer argumento del método getoradd es la clave de caché, que debe ser única dentro de la página.
Puede ver el resultado del caché mirando la fuente de la 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 >