Cache für die Verwendung mit Blazor WebAssembly und Server -Vorbereitung. Verhindert/lindert den Double Initialize UI -Blitz.
Dies ist ein Versuch, das Problem zu lösen/zu lockern, bei dem Blazor WebAssembly + Server -Vorbereitung auf Seiten einen "UI -Blitz" verursachen kann.
Die Zeit, die zum zweiten Mal benötigt wird, um die Daten zu holen, ist das, was die Benutzeroberfläche zum Blinken bringt.

Dieser Code fügt einen Cache hinzu, der dem Imemorycache sehr ähnelt (was eine der vorgeschlagenen Möglichkeiten ist, dieses Problem überhaupt zu lösen).
Anstatt den Cache auf dem Server zu speichern (wodurch z. B. eine zweite Reise zur Datenbank entfernt wird), wird der Cache auf der statischen vorgefertigten Seite gespeichert.
Wenn die Seite dann eine zweite Initialisierung erhält, wird der Cache von der statischen Seite geladen und die Daten werden von dort aus gezogen. Dies verhindert die Reise zum Server vollständig, das Entfernen des asynchronisierten Schritts und die drastische Reduzierung/Entfernung der zweiten Ladephase.
Die Bibliothek ist als Nuget -Paket für die Verurteilung erhältlich, aber es ist so klein, dass es möglicherweise vorzuziehen ist, die beiden Dateien in Ihr Projekt zu kopieren.
Install-Package Flyingpie.Blazor.PrerenderCache
builder . Services
. AddScoped < IPrerenderCache , PrerenderCache > ( )
;< component type = " typeof(Flyingpie.Blazor.PrerenderCache.PrerenderCacheStore) " render-mode = " Static " />Beachten Sie, dass diese Komponente am Ende der Seite hinzugefügt werden muss, sodass sie nach allen anderen Komponenten geladen wird.
Dies soll verhindern, dass die Komponente von IprerenderCache vorhanden ist, bevor alle zugeschnittenen Daten vorhanden sind.
[ 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 ( ) ) ;
}Das erste Argument der GetOradd-Methode ist der Cache-Schlüssel, der auf der Seite eindeutig sein muss.
Sie können das Ergebnis des Cache sehen, indem Sie sich die Seitenquelle ansehen:
< 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 >