ASP.NET Core Blazor WebAssembly derleme araçları ve önceden (AOT) derleme
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Bu makalede, tek başına Blazor WebAssembly uygulamalar için derleme araçları ve bir uygulamanın dağıtım öncesinde, önceden (AOT) derleme ile nasıl derlenecekleri açıklanmaktadır.
Makale öncelikli olarak tek başına Blazor WebAssembly uygulamalara odaklansa da, bazı mobil cihaz tarayıcıları için yığın boyutu bölümü, istemci Blazor Web Apptarafı projesi (.Client
) için de geçerlidir.
.NET WebAssembly derleme araçları
.NET WebAssembly derleme araçları, web platformu için bir derleyici araç zinciri olan Emscripten'i temel alır. Derleme araçlarını yüklemek için aşağıdaki yaklaşımlardan birini kullanın:
- Visual Studio yükleyicisindeki ASP.NET ve web geliştirme iş yükü için, isteğe bağlı bileşenler listesinden .NET WebAssembly derleme araçları seçeneğini belirleyin.
- Yönetici komut kabuğunda yürütür
dotnet workload install wasm-tools
.
Not
.NET 6 projeleri için .NET WebAssembly derleme araçları
İş yükü, wasm-tools
en son sürüm için derleme araçlarını yükler. Ancak, derleme araçlarının geçerli sürümü .NET 6 ile oluşturulan mevcut projelerle uyumlu değildir. Hem .NET 6 hem de sonraki bir sürümü desteklemesi gereken derleme araçlarını kullanan projelerin çoklu hedefleme kullanması gerekir.
.NET 7 SDK'sı wasm-tools-net6
ile uygulama geliştirirken .NET 6 projeleri için iş yükünü kullanın. İş yükünü yüklemek wasm-tools-net6
için bir yönetim komut kabuğundan aşağıdaki komutu yürütür:
dotnet workload install wasm-tools-net6
Önceden (AOT) derleme
Blazor WebAssembly , .NET kodunuzu doğrudan WebAssembly'de derleyebileceğiniz önceden (AOT) derlemeyi destekler. AOT derlemesi, daha büyük bir uygulama boyutuna zarar verebilirsiniz.
AOT derlemesini etkinleştirmeden, Blazor WebAssembly uygulamalar WebAssembly'de uygulanan bir .NET Ara Dil (IL) yorumlayıcısını kullanarak tarayıcıda çalışır ve jiterpreter olarak adlandırılan kısmi tam zamanında (JIT) çalışma zamanı desteğine sahip olur. .NET IL kodu yorumlandığından, uygulamalar genellikle herhangi bir IL yorumlaması olmadan sunucu tarafı .NET JIT çalışma zamanındakinden daha yavaş çalışır. AOT derlemesi, tarayıcı tarafından yerel WebAssembly yürütmesi için uygulamanın .NET kodunu doğrudan WebAssembly'ye derleyerek bu performans sorununu giderir. AOT performans geliştirmesi, YOĞUN CPU kullanan görevleri yürüten uygulamalar için önemli geliştirmeler sağlayabilir. AOT derlemesini kullanmanın dezavantajı, AOT ile derlenen uygulamaların genellikle IL tarafından yorumlanan karşılıklarından daha büyük olmasıdır, bu nedenle genellikle ilk istendiğinde istemciye indirilmesi daha uzun sürer.
AOT derlemesini etkinleştirmeden, Blazor WebAssembly uygulamalar WebAssembly'de uygulanan bir .NET Ara Dil (IL) yorumlayıcısı kullanarak tarayıcıda çalışır. .NET kodu yorumlandığından, uygulamalar genellikle sunucu tarafı .NET tam zamanında (JIT) çalışma zamanına göre daha yavaş çalışır. AOT derlemesi, tarayıcı tarafından yerel WebAssembly yürütmesi için uygulamanın .NET kodunu doğrudan WebAssembly'ye derleyerek bu performans sorununu giderir. AOT performans geliştirmesi, YOĞUN CPU kullanan görevleri yürüten uygulamalar için önemli geliştirmeler sağlayabilir. AOT derlemesini kullanmanın dezavantajı, AOT ile derlenen uygulamaların genellikle IL tarafından yorumlanan karşılıklarından daha büyük olmasıdır, bu nedenle genellikle ilk istendiğinde istemciye indirilmesi daha uzun sürer.
.NET WebAssembly derleme araçlarını yükleme yönergeleri için bkz . ASP.NET Core Blazor WebAssembly derleme araçları ve önceden (AOT) derleme.
WebAssembly AOT derlemesini <RunAOTCompilation>
etkinleştirmek için Blazor WebAssembly özellik kümesini true
uygulamanın proje dosyasına ekleyin:
<PropertyGroup>
<RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup>
Uygulamayı WebAssembly'de derlemek için uygulamayı yayımlayın. Yapılandırmanın yayımlanması Release
, yayımlanan uygulamanın boyutunu küçültmek için .NET Ara Dil (IL) bağlantısının da çalıştırılmasını sağlar:
dotnet publish -c Release
WebAssembly AOT derlemesi yalnızca proje yayımlandığında gerçekleştirilir. AOT derlemesi, proje geliştirme (Development
ortam) sırasında çalıştırıldığında kullanılmaz çünkü AOT derlemesi genellikle küçük projelerde birkaç dakika sürer ve büyük projeler için büyük olasılıkla çok daha uzun sürer. AOT derlemesi için derleme süresini kısaltmak, ASP.NET Core'un gelecek sürümleri için geliştirme aşamasındadır.
AOT ile derlenmiş Blazor WebAssembly bir uygulamanın boyutu genellikle .NET IL'de derlenmişse uygulamanın boyutundan daha büyüktür:
Boyut farkı uygulamaya bağlı olsa da, AOT ile derlenen uygulamaların çoğu IL ile derlenmiş sürümlerinin yaklaşık iki katıdır. Bu, AOT derlemesi kullanıldığında çalışma zamanı performansı için yük süresi performansının dengelenmesi anlamına gelir. Bu dengenin AOT derlemesini kullanmaya değip değmeyeceği uygulamanıza bağlıdır. Blazor WebAssembly YOĞUN CPU kullanan uygulamalar genellikle AOT derlemesinden en çok yararlanan uygulamalardır.
AOT ile derlenmiş bir uygulamanın daha büyük boyutu iki koşuldan kaynaklanır:
- Yerel WebAssembly'de üst düzey .NET IL yönergelerini göstermek için daha fazla kod gereklidir.
- Uygulama yayımlandığında AOT yönetilen DLL'leri kırpmaz. Blazoryansıma meta verileri ve bazı .NET çalışma zamanı özelliklerini desteklemek için DLL'leri gerektirir. İstemcide DLL'lerin gerekli hale getirilmesi indirme boyutunu artırır ancak daha uyumlu bir .NET deneyimi sağlar.
Not
Mono/WebAssembly MSBuild özellikleri ve hedefleri için bkz WasmApp.Common.targets
. (dotnet/runtime
GitHub deposu). Ortak MSBuild özellikleri için resmi belgeler, Belge blazor msbuild yapılandırma seçenekleri (dotnet/docs
#27395) başına planlanmaktadır.
Önceden (AOT) derlemeden sonra .NET IL'i kırpma
MSBuild seçeneği, WasmStripILAfterAOT
WebAssembly'de AOT derlemesi gerçekleştirdikten sonra derlenen yöntemler için .NET Ara Dilinin (IL) kaldırılmasını sağlar ve bu da klasörün boyutunu _framework
küçültür.
Uygulamanın proje dosyasında:
<PropertyGroup>
<RunAOTCompilation>true</RunAOTCompilation>
<WasmStripILAfterAOT>true</WasmStripILAfterAOT>
</PropertyGroup>
Bu ayar, kitaplıklardaki yöntemler ve uygulamadaki yöntemler de dahil olmak üzere çoğu derlenmiş yöntem için IL kodunu kırpır. Bazı derleme yöntemleri çalışma zamanında .NET yorumlayıcısı tarafından hala gerekli olduğundan kırpılamaz.
Kırpma seçeneğiyle ilgili bir sorun bildirmek için GitHub deposunda bir sorun dotnet/runtime
açın.
Uygulamanızın normal çalışmasını engelliyorsa kırpma özelliğini devre dışı bırakın:
<WasmStripILAfterAOT>false</WasmStripILAfterAOT>
Bazı mobil cihaz tarayıcıları için yığın boyutu
İstemcide çalışan ve mobil cihaz tarayıcılarını, özellikle iOS'ta Safari'yi hedefleyen bir Blazor uygulama oluştururken, MSBuild özelliğine EmccMaximumHeapSize
sahip uygulama için en yüksek belleği azaltmak gerekebilir. Daha fazla bilgi için bkz . ASP.NET Core'u Blazor WebAssemblybarındırma ve dağıtma.
Çalışma zamanı yeniden bağlama
Uygulamanın Blazor WebAssembly en büyük bölümlerinden biri, uygulamaya kullanıcının tarayıcısı tarafından ilk kez erişildiğinde tarayıcının indirmesi gereken WebAssembly tabanlı .NET çalışma zamanıdır (dotnet.wasm
). .NET WebAssembly çalışma zamanının yeniden bağlanması kullanılmayan çalışma zamanı kodunu kırparak indirme hızını artırır.
Çalışma zamanı yeniden bağlama için .NET WebAssembly derleme araçlarının yüklenmesi gerekir. Daha fazla bilgi için bkz . ASP.NET Core Blazoriçin Araçlar.
.NET WebAssembly derleme araçları yüklendiğinde, yapılandırmada Release
bir uygulama yayımlandığında çalışma zamanı yeniden bağlaması otomatik olarak gerçekleştirilir. Genelleştirme devre dışı bırakıldığında boyut küçültme özellikle çarpıcıdır. Daha fazla bilgi için bkz . ASP.NET Çekirdek Blazor genelleştirme ve yerelleştirme.
Önemli
Çalışma zamanı yeniden bağlama, sınıf örneği JavaScript tarafından çağrılabilen .NET yöntemlerini korumalı olmadığı sürece kırpır. Daha fazla bilgi için bkz . ASP.NET Core'da BlazorJavaScript işlevlerinden .NET yöntemlerini çağırma.
Tek Yönerge, Birden Çok Veri (SIMD)
BlazorTek bir yönerge kullanarak birden çok veri parçası üzerinde paralel bir işlem gerçekleştirerek vektörleştirilmiş hesaplamaların aktarım hızını geliştirmek için WebAssembly Tek Yönergesi, Birden Çok Veri (SIMD) kullanır.
SIMD'yi devre dışı bırakmak için, örneğin SIMD'yi desteklemeyen mobil cihazlarda eski tarayıcıları veya tarayıcıları hedeflerken, <WasmEnableSIMD>
özelliği false
uygulamanın proje dosyasında (.csproj
):
<PropertyGroup>
<WasmEnableSIMD>false</WasmEnableSIMD>
</PropertyGroup>
Daha fazla bilgi için bkz . .NET WebAssembly uygulamalarını yapılandırma ve barındırma: SIMD - Tek yönerge, birden çok veri ve kılavuzun sürümlendirilmediğini ve en son genel sürüm için geçerli olduğunu unutmayın.
BlazorTek bir yönerge kullanarak birden çok veri parçası üzerinde paralel bir işlem gerçekleştirerek vektörleştirilmiş hesaplamaların aktarım hızını geliştirmek için WebAssembly Tek Yönergesi, Birden Çok Veri (SIMD) kullanır.
SIMD'yi <WasmEnableSIMD>
etkinleştirmek için, uygulamanın proje dosyasına (true
.csproj
):
<PropertyGroup>
<WasmEnableSIMD>true</WasmEnableSIMD>
</PropertyGroup>
Daha fazla bilgi için bkz . .NET WebAssembly uygulamalarını yapılandırma ve barındırma: SIMD - Tek yönerge, birden çok veri ve kılavuzun sürümlendirilmediğini ve en son genel sürüm için geçerli olduğunu unutmayın.
Özel durumları işleme
Özel durum işleme varsayılan olarak etkindir. Özel durum işlemeyi <WasmEnableExceptionHandling>
false
devre dışı bırakmak için, uygulamanın proje dosyasında (.csproj
):
<PropertyGroup>
<WasmEnableExceptionHandling>false</WasmEnableExceptionHandling>
</PropertyGroup>
WebAssembly özel durum işlemesini <WasmEnableExceptionHandling>
etkinleştirmek için, uygulamanın proje dosyasında.csproj
(true
):
<PropertyGroup>
<WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
</PropertyGroup>
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
- .NET WebAssembly uygulamalarını yapılandırma ve barındırma: EH - Özel durum işleme
- Özel durumları işleme
Ek kaynaklar
ASP.NET Core