Кэш для использования с Blazor Webassembly и Server Prerendering. Предотвращает/ослабляет двойную инициализированную вспышку пользовательского интерфейса.
Это попытка решить/облегчить проблему, где Blazor Webassembly + Server Prerendering на страницах может вызвать «вспышку пользовательского интерфейса».
Время, необходимое для получения данных во второй раз, - это то, что заставляет пользовательский интерфейс вспыхивать.

Этот кусок кода добавляет кэш, который многое относится к Imemorycache (который является одним из предлагаемых способов решения этой проблемы в первую очередь).
Хотя вместо хранения кэша на сервере (тем самым удаляя, например, вторая поездка в базу данных), кэш сохраняется на статической предварительной странице.
Затем, когда страница получает вторую инициализацию, кэш загружается со статической страницы, а данные получают оттуда. Это полностью предотвращает поездку на сервер, удаляя асинхронный шаг и резко уменьшая/удаляя вторую фазу загрузки.
Библиотека доступна в виде пакета Nuget для убеждения, но она настолько мала, что предпочтительнее просто скопировать 2 файла в ваш проект.
Install-Package Flyingpie.Blazor.PrerenderCache
builder . Services
. AddScoped < IPrerenderCache , PrerenderCache > ( )
;< component type = " typeof(Flyingpie.Blazor.PrerenderCache.PrerenderCacheStore) " render-mode = " Static " />Обратите внимание, что этот компонент должен быть добавлен в саму нижнюю часть страницы, поэтому он загружается после всех других компонентов.
Это должно предотвратить рендеринг компонента до того, как в Iprerendercache доступна все, чтобы все до-кэшированные даты.
[ 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 ( ) ) ;
}Первым аргументом Getoradd-Method является ключ кеша, который должен быть уникальным на странице.
Вы можете увидеть результат кэша, посмотрев на источник страницы:
< 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 >