Prerender ASP.NET Core Razor bileşenleri
Bu makalede, s içindeki Blazor Web Appsunucu tarafından işlenen bileşenler için bileşen ön kayıt senaryoları açıklanmaktadırRazor.
Ön kayıt , işlenen denetimler için olay işleyicilerini etkinleştirmeden başlangıçta sunucudaki sayfa içeriğini işleme işlemidir. Sunucu, uygulamanın kullanıcılara daha duyarlı hissetmesini sağlayan ilk isteğe yanıt olarak sayfanın HTML kullanıcı arabirimini mümkün olan en kısa sürede verir. Ön kayıt, arama motorlarının sayfa derecesini hesaplamak için kullandığı ilk HTTP yanıtının içeriğini işleyerek Arama Altyapısı İyileştirmesini (SEO) da geliştirebilir.
Önceden girilmiş durumu kalıcı hale
Önceden girilmiş durum kalıcı olmadan, ön kayıt sırasında kullanılan durum kaybolur ve uygulama tamamen yüklendiğinde yeniden oluşturulması gerekir. Herhangi bir durum zaman uyumsuz olarak oluşturulursa, bileşen yeniden başlatıldığında önceden yenilenen kullanıcı arabirimi değiştirildiğinde kullanıcı arabirimi titreyebilir.
Aşağıdaki PrerenderedCounter1
sayaç bileşenini göz önünde bulundurun. Bileşen, yaşam döngüsü yönteminde OnInitialized
ön kayıt sırasında ilk rastgele sayaç değerini ayarlar. İstemciye SignalR bağlantı kurulduktan sonra bileşen yeniden başlatılır ve ikinci kez yürütülürken OnInitialized
ilk sayı değeri değiştirilir.
PrerenderedCounter1.razor
:
@page "/prerendered-counter-1"
@rendermode @(new InteractiveServerRenderMode(prerender: true))
@inject ILogger<PrerenderedCounter1> Logger
<PageTitle>Prerendered Counter 1</PageTitle>
<h1>Prerendered Counter 1</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount;
protected override void OnInitialized()
{
currentCount = Random.Shared.Next(100);
Logger.LogInformation("currentCount set to {Count}", currentCount);
}
private void IncrementCount() => currentCount++;
}
Uygulamayı çalıştırın ve bileşenden günlüğe kaydetmeyi inceleyin. Aşağıda örnek çıkış verilmiştir.
Not
Uygulama etkileşimli (gelişmiş) yönlendirmeyi benimsediyse ve sayfaya bir iç gezinti yoluyla ulaşılırsa, ön kayıt gerçekleşmez. Bu nedenle, aşağıdaki çıkışı görmek için bileşenin PrerenderedCounter1
tam sayfa yeniden yüklemesini gerçekleştirmeniz gerekir.
info: BlazorSample.Components.Pages.PrerenderedCounter1[0]
currentCount set to 41
info: BlazorSample.Components.Pages.PrerenderedCounter1[0]
currentCount set to 92
İlk günlüğe kaydedilen sayı, ön kayıt sırasında gerçekleşir. Bileşen yeniden yenilendiğinde, ön kayıt sonrasında sayı yeniden ayarlanır. Ayrıca, sayı 41'den 92'ye güncelleştirildiğinde kullanıcı arabiriminde bir titreşim de vardır.
Ön kayıt sırasında sayacın ilk değerini korumak için, Blazor hizmeti kullanarak PersistentComponentState önceden oluşturulmuş bir sayfada kalıcı durumu destekler (ve Sayfalar veya MVC uygulamalarının Razor sayfalarına veya görünümlerine eklenmiş bileşenler için, Kalıcı Bileşen Durum Etiketi Yardımcısı).
Önceden oluşturulmuş durumu korumak için, hizmeti kullanarak PersistentComponentState hangi durumun kalıcı hale dönüştürüleceğine karar verin. PersistentComponentState.RegisterOnPersisting uygulama duraklatmadan önce bileşen durumunu kalıcı hale getirmek için bir geri çağırma kaydeder. Uygulama devam ettiğinde durum alınır.
Aşağıdaki örnekte genel desen gösterilmektedir:
- Yer tutucu,
{TYPE}
kalıcı olacak veri türünü temsil eder. - Yer
{TOKEN}
tutucu bir durum tanımlayıcı dizesidir. yer tutucunun{VARIABLE}
durumu tutan değişkenin adı olduğu değerini kullanmayınameof({VARIABLE})
göz önünde bulundurun.nameof()
Durum tanımlayıcısı için kullanılması, tırnak içine alınmış bir dizenin kullanılmasını önler.
@implements IDisposable
@inject PersistentComponentState ApplicationState
...
@code {
private {TYPE} data;
private PersistingComponentStateSubscription persistingSubscription;
protected override async Task OnInitializedAsync()
{
persistingSubscription =
ApplicationState.RegisterOnPersisting(PersistData);
if (!ApplicationState.TryTakeFromJson<{TYPE}>(
"{TOKEN}", out var restored))
{
data = await ...;
}
else
{
data = restored!;
}
}
private Task PersistData()
{
ApplicationState.PersistAsJson("{TOKEN}", data);
return Task.CompletedTask;
}
void IDisposable.Dispose()
{
persistingSubscription.Dispose();
}
}
Aşağıdaki sayaç bileşeni örneği, ön kayıt sırasında sayaç durumunu kalıcı hale getirir ve bileşeni başlatmak için durumu alır.
PrerenderedCounter2.razor
:
@page "/prerendered-counter-2"
@implements IDisposable
@inject ILogger<PrerenderedCounter2> Logger
@inject PersistentComponentState ApplicationState
<PageTitle>Prerendered Counter 2</PageTitle>
<h1>Prerendered Counter 2</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount;
private PersistingComponentStateSubscription persistingSubscription;
protected override void OnInitialized()
{
persistingSubscription =
ApplicationState.RegisterOnPersisting(PersistCount);
if (!ApplicationState.TryTakeFromJson<int>(
nameof(currentCount), out var restoredCount))
{
currentCount = Random.Shared.Next(100);
Logger.LogInformation("currentCount set to {Count}", currentCount);
}
else
{
currentCount = restoredCount!;
Logger.LogInformation("currentCount restored to {Count}", currentCount);
}
}
private Task PersistCount()
{
ApplicationState.PersistAsJson(nameof(currentCount), currentCount);
return Task.CompletedTask;
}
void IDisposable.Dispose() => persistingSubscription.Dispose();
private void IncrementCount() => currentCount++;
}
Bileşen yürütürken, currentCount
ön kayıt sırasında yalnızca bir kez ayarlanır. Bileşen yeniden başlatıldığında değer geri yüklenir. Aşağıda örnek çıkış verilmiştir.
Not
Uygulama etkileşimli yönlendirmeyi benimserse ve sayfaya bir iç gezinti yoluyla ulaşılırsa, ön kayıt gerçekleşmez. Bu nedenle, aşağıdaki çıkışı görmek için bileşenin PrerenderedCounter2
tam sayfa yeniden yüklemesini gerçekleştirmeniz gerekir.
info: BlazorSample.Components.Pages.PrerenderedCounter2[0]
currentCount set to 96
info: BlazorSample.Components.Pages.PrerenderedCounter2[0]
currentCount restored to 96
Ön kayıt sırasında kullanılan durumla aynı duruma sahip bileşenleri başlatarak, pahalı başlatma adımları yalnızca bir kez yürütülür. İşlenen kullanıcı arabirimi önceden oluşturulmuş kullanıcı arabirimiyle de eşleşir, bu nedenle tarayıcıda titreme olmaz.
Kalıcı önceden alınan durum, bileşen durumunu geri yüklemek için kullanıldığı istemciye aktarılır. İstemci tarafı işleme (CSR, InteractiveWebAssembly
) sırasında veriler tarayıcıya sunulur ve hassas, özel bilgiler içermemelidir. Etkileşimli sunucu tarafı işleme sırasında (etkileşimli SSR, InteractiveServer
), ASP.NET Core Data Protection verilerin güvenli bir şekilde aktarılmasını sağlar. İşleme InteractiveAuto
modu WebAssembly ve Sunucu etkileşimini birleştirir, bu nedenle CSR örneğinde olduğu gibi verilerin tarayıcıya açık olmasını göz önünde bulundurmanız gerekir.
Sayfalara ve görünümlere eklenmiş bileşenler (Razor Sayfalar/MVC)
Sayfalar veya MVC uygulamasının Razor bir sayfasına veya görünümüne eklenmiş bileşenler için, uygulamanın düzeninin kapanış </body>
etiketine HTML etiketiyle Kalıcı <persist-component-state />
Bileşen Durum Etiketi Yardımcısı'nı eklemeniz gerekir. Bu yalnızca Sayfalar ve MVC uygulamaları için Razor gereklidir. Daha fazla bilgi için bkz . ASP.NET Core'da Kalıcı Bileşen Durum Etiketi Yardımcısı.
Pages/Shared/_Layout.cshtml
:
<body>
...
<persist-component-state />
</body>
Etkileşimli yönlendirme ve ön kayıt
Etkileşimli yönlendirme için iç gezinti, sunucudan yeni sayfa içeriği istemeyi içermez. Bu nedenle, iç sayfa istekleri için ön kayıt gerçekleşmez.
Hizmet PersistentComponentState yalnızca ilk sayfa yüklemesinde çalışır ve gelişmiş sayfa gezinti olaylarında çalışmaz. Uygulama, kalıcı bileşen durumunu kullanan bir sayfada tam (gelişmiş olmayan) bir gezinti gerçekleştirirse, kalıcı durum uygulamanın etkileşimli hale geldiğinde kullanması için kullanılabilir hale gelir. Ancak etkileşimli bir bağlantı hattı önceden oluşturulmuşsa ve kalıcı bileşen durumunu işleyen bir sayfada gelişmiş bir gezinti gerçekleştiriliyorsa, bu durum mevcut bağlantı hattında kullanılabilir duruma getirilmez. Hizmet PersistentComponentState gelişmiş gezintinin farkında değildir ve zaten çalışmakta olan bileşenlere durum güncelleştirmeleri sunmak için bir mekanizma yoktur.
Prerendering kılavuzu
Ön kayıt kılavuzu, belgelerde konu başlığına Blazor göre düzenlenmiştir. Aşağıdaki bağlantılar, konuya göre ayarlanan belgelerde yer alan tüm ön kayıt kılavuzlarını kapsar:
Temel Bilgiler
Bileşenler
- Ön kayıt sırasında içeriği denetleme
<head>
- Razor prerendering ile ilgili bileşen yaşam döngüsü konuları
- Bileşen başlatma (
OnInitialized{Async}
) - Bileşen işlendikten sonra (
OnAfterRender{Async}
) - Prerendering sonrasında durum bilgisi olan yeniden bağlantı
- JavaScript birlikte çalışmasıyla önceden giriş: Bu bölüm, JavaScript'i .NET'ten çağırma ve JavaScript'ten .NET'i çağırma ile ilgili iki JS birlikte çalışma makalesinde de gösterilir.
- Bileşen başlatma (
- QuickGrid bileşen örnek uygulaması: Örnek uygulama için Blazor QuickGrid, GitHub Sayfalarında barındırılır. Topluluk tarafından korunan
BlazorWasmPrerendering.Build
GitHub projesini kullanarak statik ön kayıt sayesinde site hızla yüklenir. - Bileşenleri Sayfalar ve MVC uygulamalarıyla Razor tümleştirirken önceden oluşturma
- Ön kayıt sırasında içeriği denetleme
Kimlik doğrulaması ve yetkilendirme
Durum yönetimi: Hazırlamayı işleme: Hazırlamayı işle bölümünün yanı sıra, makalenin diğer bölümlerinden bazıları prerendering ile ilgili açıklamalar içerir.
ASP.NET Core