Aracılığıyla paylaş


ASP.NET Core Blazor WebAssembly derleme araçları ve önceden (AOT) derleme

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

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ü bir Blazor Web Uygulamasının istemci tarafı 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çeneklerine göre planlanmaktadır (dotnet/docs #27395).

Ö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)

WebAssembly Tek Yönergesi, Birden Çok Veri (SIMD), tek 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ştirebilir. SIMD varsayılan olarak etkindir.

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.

WebAssembly Tek Yönergesi, Birden Çok Veri (SIMD), tek 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ştirebilir. SIMD varsayılan olarak devre dışıdı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>

Ek kaynaklar