.NET 9.0 Preview 5, Blazor'da iyileştirmeler sunuyor
Microsoft, .NET 9.0'ın beşinci önizleme sürümünü indirilebilir hale getirdi. Geliştiriciler artık Blazor uygulamalarında oluşturma modunu daha kolay sorgulayabilecek. Blazor Sunucusu, yeniden bağlanırken gelişmiş bir kullanıcı deneyimi sağlar ve statik kaynak indirme işlemi optimize edilmiştir. Ayrıca Microsoft, Visual Studio sürüm 17.11'in Önizleme 2'ye yönelik bir güncelleştirmesini yayımladı.
Duyuru
Blazor Sunucusu bağlantılarını geri yüklemeye yönelik iyileştirmeler
Bağlantıların yeniden kurulması söz konusu olduğunda Blazor Sunucusunda büyük bir gelişme var. Blazor Sunucusu, kullanıcı arayüzünün web sunucusunda oluşturulduğu ve web soketi aracılığıyla sürekli veri alışverişi ile web tarayıcısına iletildiği, böylece kullanıcının çevrimdışı hariç tek sayfalık bir uygulama (SPA) deneyimi edindiği bir Blazor çeşididir. Blazor Sunucusunda bulunamayan işlevsellik.
ayrıca oku
Daha fazla göster
daha az göster
.NET 9.0'da Microsoft, yalnızca bağlantı kaybı göstergesinin elden geçirilmesini sunmakla kalmıyor (bkz. Şekil 1), aynı zamanda yeniden bağlanma sırasında iyileştirmeler de sunuyor. Artık kullanıcı bir tarayıcı sekmesine döndüğünde otomatik olarak geri yüklenecektir. Ek olarak, Microsoft artık bağlantıyı yeniden kurmak için doğrusal girişimler kullanmıyor, bunun yerine üstel aralıklar kullanıyor. Bu, Liste 1'de gösterildiği gibi yapılandırılabilir.
Blazor Sunucusu, web sunucusundaki durumu zaten sildiği için veya web sunucusu işlemi yeniden başlatıldığından (örneğin, program kodunu değiştirirken) bağlantı geri yüklenemezse, tarayıcı otomatik olarak uygulamayı tam olarak yeniden yükler. Şimdiye kadar kullanıcıların uygulamayı manuel olarak başlatması gerekiyordu.
Sayfaları yeniden yüklemeniz gerekirse, uygulama durumu ve kullanıcıdan gelen herhangi bir form girişi yine de kaybolacaktır. Ancak bu yılki Build konferansında Microsoft, “ASP.NET Core ve Blazor ile Tam Yığın Modern Web Geliştirme” konferansında yeni bir etiketin yayınlanmamış bir prototipini sundu. <StatefulReconnection> App.razor dosyasında, Blazor Sunucusunun en azından yeniden yükleme sırasında kullanıcının mevcut form girişini korumasına olanak tanır.
.NET 9.0 Preview 5'ten bu yana Blazor Server'da yeniden bağlantının iyileştirilmiş modal görünümü (Şekil 1).
(Resim: Windows 11 Ekran Görüntüsü: Holger Schwichtenberg)
Microsoft'un aşağıdaki listesi Blazor Sunucusu için bağlantı yeniden deneme aralığı yapılandırmasını gösterir:
Blazor.start({
circuit: {
reconnectionOptions: {
retryIntervalMilliseconds: (previousAttempts, maxRetries) => previousAttempts >= maxRetries ? null : previousAttempts * 1000,
},
},
});
Blazor Sunucusunda mevcut oluşturma modunu belirleme
.NET 8.0'dan başlayarak, Blazor tabanlı tarayıcı uygulamalarında yalnızca Blazor Server ve Blazor WebAssembly işleme modları değil, aynı zamanda sunucu tarafı statik işleme ve sunucu tarafı statik işleme ile Blazor Server ve Blazor Server arasında geçiş yapabilen otomatik mod da bulunur. Blazor Web Montajı. Şimdiye kadar geliştiricilerin Blazor'un şu anda hangi modda görüntülendiğini belirlemesi çok zordu.
.NET 9.0 Preview 5'te Microsoft artık temel sınıfı sunuyor ComponentBase tüm Razor bileşenlerinin özellikleri Platform değerlerle Name (dize) e IsInteractive (bool). Özellik için olası karakter dizeleri Name Ben:
- Sunucu tarafı statik oluşturma için “Statik”
- Blazor Sunucusu için “Sunucu”
- Blazor WebAssembly için “WebAssembly”
- WPF, Windows Forms ve .NET MAUI'deki hibrit Blazor uygulaması için “WebView”
Microsoft, bu özelliği GitHub'da zaten duyurdu Platform sonraki ön izleme sürümlerinde hâlâ mevcut RenderInfo yeniden isimlendirmek.
Bu sayfa web sunucusunda statik olarak oluşturuldu. Ancak otomatik oluşturma moduna ayarlanmıştır; bu, Blazor Sunucusuna veya doğrudan Blazor WebAssembly'ye geçiş olduğu anlamına gelir (Şekil 2).
Bu sayfa şu anda Blazor Sunucusu kullanılarak oluşturulmuştur ve en azından sayfaya tekrar erişilene kadar bu şekilde kalmalıdır (Şekil 3).
Bu sayfa, Blazor WebAssembly kullanılarak web tarayıcısında oluşturulur (Şekil 4).
Bu sayfa web sunucusunda statik olarak oluşturulur ve @attribute aracılığıyla erişilebilir. [Microsoft.AspNetCore.Components.ExcludeFromInteractiveRouting] Blazor'un etkileşimli çeşitlerinden birine geçmeyecek şekilde ayarlayın (Şekil 5).
Statik web kaynakları için optimizasyonlar
.NET 9.0'da Microsoft, CSS dosyaları, JavaScript dosyaları, grafikler ve videolar gibi statik web kaynaklarının dağıtımını optimize etti. Yeni yapılandırma yöntemi MapStaticAssets() öncekinin yerine UseStaticFiles() kaynak sürümü oluşturma için sıkıştırma (bkz. Şekil 6) ve SHA-256 karma e-etiketleme sağlar. Bu, tarayıcının önbellekteki bir dosyanın güncel olup olmadığını tespit etmesine olanak tanır (bkz. Şekil 7).
Microsoft Blazor Web App proje şablonunu kullanarak sıkıştırma yoluyla ağ kullanımını azaltma (Şekil 6).
Bir grafik için E-Etiketlerin kullanılması (Şekil 7).
Platformlar arası uygulamalar için yeni proje şablonu
.NET 9.0 Preview 5'ten başlayarak Microsoft, “.NET MAUI Blazor Hibrit ve Web Uygulaması” adlı yeni bir proje şablonu sağlar (bkz. Şekil 8). Komut satırında şablona “maui-blazer-web” adı verilir. Yeni şablon, hem bir Blazor web uygulaması (görüntüleme modu Statik, Sunucu, WebAssembly ve Otomatik arasından seçilebilen) hem de bir MAUI Blazor uygulaması oluşturur. “Otomatik” seçeneğinin seçilmesi Şekil 9'da gösterilen dört projeyi oluşturur:
- Blazor MAUI için XAML dosyaları ve
- Bir web sunucusu projesi
- Web tarayıcısı için bir proje
- Razor Components ile paylaşılan bir proje
Platformlar arası uygulamalar için yeni “.NET MAUI Blazor Hibrit ve Web Uygulaması” proje şablonu (Şekil 8).
Yeni “.NET MAUI Blazor Hibrit ve Web Uygulaması” proje şablonundaki dört proje (Şekil 9).
Kimlik doğrulama durumunu aktarma
Blazor tabanlı uygulamalar artık sunucu tarafı kimlik doğrulama durumunu tarayıcıdaki Blazor WebAssembly'ye aktarmanın daha kolay bir yoluna sahip. Yeni yöntem bunun için var AddAuthenticationStateSerialization() sunucu için e AddAuthenticationStateDeserialization() müşteri için. Program.cs'deki ilk kodda çağrılabilirler. Varsayılan olarak, kimliği doğrulanmış kullanıcının adı ve rolleri HTML yorumu (<!--Blazor-WebAssembly-Component-State:eyJfX2ludGVybmFsX19BdXRoZW50aWNhdGlvb… -->) sunucudan tarayıcıya aktarılır. İsteğe bağlı olarak geliştiriciler aşağıdaki gibi tüm istekleri de gönderebilir:
builder.Services.AddRazorComponents()
.AddInteractiveWebAssemblyComponents()
.AddAuthenticationStateSerialization(options => options.SerializeAllClaims = true);
Varlık Çerçevesi Temel iyileştirmeler
Önizleme 5'te Entity Framework Core'da yalnızca bazı küçük değişiklikler var. Nesne İlişkisel Eşleştiricisi (ORM) artık .NET yöntemlerini kullanabilir TimeOnly.FromDateTime() VE TimeOnly.FromTimeSpan() LINQ sorgularında SQL'e çevrildi. karşılaştırmak Count != 0 VE Count > 0 Entity Framework Core artık COUNT yerine EXISTS kullanılarak SQL'e çevriliyor; örneğin aşağıdaki LINQ sorgusundan
var blogsWithPost = await context.Blogs
.Where(b => b.Posts.Count > 0)
.ToListAsync();
bu SQL sorgusu şöyle olacaktır:
SELECT "b"."Id", "b"."Name", "b"."SiteUri"
FROM "Blogs" AS "b"
WHERE EXISTS (
SELECT 1
FROM "Posts" AS "p"
WHERE "b"."Id" = "p"."BlogId")
Parametre seti
.NET temel sınıf kitaplığında parametre dizilerini alan 60'tan fazla yöntemin artık ek yükü de var ReadOnlySpan<T>Örneğin String.Format(), String.Join() VE Console.Writeline().
Bu, C# 13.0'daki değişken parametreleri geçirmek için genel küme türlerini destekleyen yeni “Params Koleksiyonları” dil özelliğini temel alır. params yöntem çağrılarının hızını artırmayı amaçlayan izin verilir. C# derleyicisi argümanları yığında saklayabilir ve aksi takdirde ortaya çıkacak örtülü dizi tahsisinden kaçınabilir.
Aşağıdaki genel miktar türleri dahildir params C# 13.0'da izin verilir:
- System.Collections.Generic.IEnumerable<T>
- System.Collections.Generic.IReadOnlyCollection<T>
- System.Collections.Generic.IReadOnlyList<T>
- System.Collections.Generic.ICollection<T>
- System.Collections.Generic.IList<T>
- Bütün sınıflar bu System.Collections.Generic.IEnumerable<T> uygulamak
- System.Span<T>
- System.ReadOnlySpan<T>
/// <summary>
/// Bisher: Parameter-Array
/// </summary>
public void MethodeMitbeliebigVielenParametern_Alt(string text, params int[] args)
{
CUI.H2(nameof(MethodeMitbeliebigVielenParametern_Alt));
CUI.Print(text + ": " + args.Length);
foreach (var item in args)
{
CUI.LI(item);
}
}
/// <summary>
/// Neu: Eine Methode mit params-List statt Array
/// </summary>
public void MethodeMitbeliebigVielenParametern_Neu(string text, params List<int> args)
{
CUI.H2(nameof(MethodeMitbeliebigVielenParametern_Neu));
CUI.Print(text + ": " + args.Count); // statt args.Length
foreach (var item in args)
{
CUI.LI(item);
}
}
/// <summary>
/// Neue Überladungen in der Basisklassenbibliothek
/// </summary>
public void NeueBCLUeberladungen()
{
var p1 = "Dr. Holger Schwichtenberg";
var p2 = "www.dotnet-doktor.de";
List<string> list = [p1, p2];
Console.WriteLine("{0} = {1}", list);
var s1 = String.Format("{0} = {1}", [p1, p2]);
var s2 = String.Join(", ", list);
}
.NET 9.0 Preview 5'teki diğer yeni özellikler
.NET 8.0'da tanıtılan sınıf System.Buffers.SearchValues şimdi yöntemde var Create() Yalnızca tek karakterleri değil, başka bir dizedeki dizelerin tamamını hızlı bir şekilde aramak için ek yükü alın, bkz. Liste 3:
Aşağıdaki kod uzantıyı gösterir Create() sınıfta System.Buffers.SearchValues
// In .NET 8.0 möglich
SearchValues<char> digits = SearchValues.Create("0123456789");
string text1 = "Hinweis: Der Buchstabe A hat in der ASCII-Tabelle den Wert 97.";
var positionDerErstenZiffer = text1.AsSpan().IndexOfAny(digits);
Console.WriteLine(positionDerErstenZiffer); // 59
// Ab .NET 9.0 Preview 5 möglich
SearchValues<string> artikel =
SearchValues.Create(["der", "die", "das"], StringComparison.OrdinalIgnoreCase);
string text2 = "Hinweis: Der Buchstabe A hat in der ASCII-Tabelle den Wert 97.";
var positionDesErstenArtikels = text2.AsSpan().IndexOfAny(artikel);
Console.WriteLine(positionDesErstenArtikels); // 9
Sınıfta System.Threading.Tasks.Task Microsoft'un yöntemleri var WhenEach() az önce tanıttım, IAsyncEnumerable<Task> teslimat ve bir foreachdöngü, bir arka plan görevinin sonucu mevcut olur olmaz çalışır. Liste 4'te, üç HTTP isteğinin durumunu başarılı bir şekilde belirlemek için kullanılır.
Aşağıdaki kod kullanımını gösterir WhenEach()
using HttpClient http = new();
Task<HttpResponseMessage> t1 = http.GetAsync("http://www.dotnetframework.de");
Task<HttpResponseMessage> t2 = http.GetAsync("http://www.dotnet8.de");
Task<HttpResponseMessage> t3 = http.GetAsync("http://www.dotnet9.de");
await foreach (Task<HttpResponseMessage> t in Task.WhenEach(t2, t1, t3))
{
Console.WriteLine($"{DateTime.Now.ToLongTimeString()}: {t.Result.RequestMessage.RequestUri} = {t.Result.StatusCode}");
}
Ayrıca Microsoft, .NET 9.0'da yeni yöntemi tanıtıyor CreateUnboundedPrioritized<T> sınıfta System.Threading.Channels.Chanel ayrıca yeni bir sınıf TypeName System.Reflection.Metadata NuGet paketinde. Ayrıntıları sürüm notlarında bulabilirsiniz.
(Resim: Dmytro Vikarchuk/Shutterstock)
iX ve dpunkt.verlag tarafından 19 Kasım 2024'te düzenlenecek BetterCode() .NET 9.0 çevrimiçi konferansında, www.IT-Visions.de adresindeki .NET uzmanları pratik örnekler kullanarak .NET 9.0'ın son sürümünü sunacaklar. Bunlar arasında .NET 9.0 SDK, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, Entity Framework Core 9.0 ile OR eşlemesi, Windows Forms 9.0, WPF 9.0, WinUI, .NET MAUI 9.0 ile platformlar arası geliştirme ve bir perspektif yer alıyor. .NET 10.0'da.
Bilet satışları başladı bile; indirimli kör kuş biletleri program duyurusu öncesinde satışa sunuldu.
.NET MAUI artık Android API sürüm 35'in Beta 2'sini desteklemektedir. Marshalled LLVM yöntemlerini kullandığınızda, Android'de %10'luk bir performans artışı görmelisiniz. Daha önce ortaya çıkan kırpma hataları da düzeltildi.
(harita)
Haberin Sonu