Megosztás a következőn keresztül:


ASP.NET Core Blazor WebAssembly build eszközei és az előzetes (AOT) fordítása

Jegyzet

Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.

Figyelmeztetés

A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. A jelen kiadást lásd a .NET 9-es verzióban ebben a cikkben .

Ez a cikk az önálló Blazor WebAssembly-alkalmazások buildelési eszközeit ismerteti, valamint azt, hogyan állíthat össze alkalmazásokat az üzembe helyezés előtt, előre elkészített (AOT) összeállítással.

.NET WebAssembly buildelési eszközök

A .NET WebAssembly buildelési eszközei Emscripten, a webes platform fordítóeszközláncán alapulnak.

A buildelési eszközök .NET-számítási feladatként való telepítéséhez használja az alábbi módszerek egyikét :

  • A Visual Studio telepítőjének ASP.NET és webfejlesztési számítási feladataihoz válassza a .NET WebAssembly buildelési eszközöket lehetőséget az opcionális összetevők listájából. A beállítás a következőket biztosítja:

    • A számítási feladat telepítve van a legújabb .NET SDK-hoz.
    • Ha a Visual Studio új verziója megjelent, és új .NET SDK-t tartalmaz, a lehetőség telepíti az új SDK számítási feladatát.
  • Másik lehetőségként futtassa a következő parancsot egy felügyeleti parancshéjban a legújabb számítási feladat telepítéséhez a rendszeren elérhető legújabb .NET SDK-ra:

    dotnet workload install wasm-tools
    

Ha egy korábbi .NET-kiadást meg szeretne célozni egy adott .NET SDK-val, telepítse a wasm-tools-net{MAJOR VERSION} számítási feladatot:

  • A {MAJOR VERSION} helyőrzőt a megcélzni kívánt .NET-kiadás főverziószámára cseréli (például wasm-tools-net8 .NET 8 esetén).
  • A számítási feladatok .NET SDK-nként vannak telepítve. wasm-tools Az egyik SDK számítási feladatának telepítése nem teszi elérhetővé a rendszer többi SDK-jának számára.
  • Minden használni kívánt .NET SDK-verzióhoz telepítenie kell a megfelelő számítási feladatot.

Az alábbi lista az egyes .NET SDK-khoz telepíteni kívánt számítási feladatokat mutatja be a megcélzott alkalmazásoktól függően. Bár több sor is tartalmazhatja ugyanazt a számítási feladatot, a számítási feladatok mindig kissé eltérnek az egyes .NET SDK-k esetében.

  • A .NET 10 SDK használata
    • A .NET 10-re való célzáshoz szükséges wasm-tools.
    • A .NET 9 célzásához szükséges wasm-tools-net9.
    • A .NET 8 célzásához szükséges wasm-tools-net8.
  • A .NET 9 SDK használata
    • A .NET 9 célzásához szükséges wasm-tools.
    • A .NET 8 célzásához szükséges wasm-tools-net8.
  • A .NET 8 SDK használata: A .NET 8 célzása megköveteli wasm-tools.

Idő előtti (AOT) összeállítás

Blazor WebAssembly támogatja az idő előtti (AOT) fordítást, ahol a .NET-kódot közvetlenül a WebAssemblybe fordíthatja. Az AOT-fordítás javítja a futásidejű teljesítményt, viszont nagyobb lesz az alkalmazás mérete.

A böngészőben futó alkalmazások, amikor az AOT-fordítás nincs engedélyezve, egy .NET köztes nyelv (IL)-értelmezőt használnak, amely a WebAssembly-ben van megvalósítva, részleges just-in-time (JIT) futásidejű támogatással, amelyet informálisan jiterpreterkéntemlegetnek. A .NET IL-kód értelmezése miatt az alkalmazások általában lassabban futnak, mint egy kiszolgálóoldali .NET JIT-futtatókörnyezetben, il-értelmezés nélkül. Az AOT összeállítása úgy oldja meg ezt a teljesítményproblémát, hogy egy alkalmazás .NET-kódját közvetlenül a WebAssemblybe alakítja a böngésző natív WebAssembly-végrehajtásához. Az AOT-teljesítmény javítása drámai javulást eredményezhet a processzorigényes feladatokat végrehajtó alkalmazások számára. Az AOT-fordítás használatának hátránya, hogy az AOT által lefordított alkalmazások általában nagyobbak, mint az IL által értelmezett társaik, ezért általában hosszabb ideig tart letölteni őket az ügyfélhez, amikor először kérik őket.

Az AOT-fordítás bekapcsolása nélkül Blazor WebAssembly alkalmazások a böngészőben futnak a WebAssemblyben implementált .NET köztes nyelv (IL) értelmező használatával. A .NET-kód értelmezése miatt az alkalmazások általában lassabban futnak, mint a kiszolgálóoldali .NET- futtatókörnyezetben. Az AOT összeállítása úgy oldja meg ezt a teljesítményproblémát, hogy egy alkalmazás .NET-kódját közvetlenül a WebAssemblybe alakítja a böngésző natív WebAssembly-végrehajtásához. Az AOT-teljesítmény javítása drámai javulást eredményezhet a processzorigényes feladatokat végrehajtó alkalmazások számára. Az AOT-fordítás használatának hátránya, hogy az AOT által lefordított alkalmazások általában nagyobbak, mint az IL által értelmezett társaik, ezért általában hosszabb ideig tart letölteni őket az ügyfélhez, amikor először kérik őket.

A .NET WebAssembly építési eszközeinek telepítéséhez szükséges útmutatásért tekintse meg az ASP.NET Core Blazor WebAssembly építési eszközeit és az előzetes (AOT) fordítást.

A WebAssembly AOT-fordítás engedélyezéséhez állítsa a <RunAOTCompilation> tulajdonságot true-re, és adja hozzá a Blazor WebAssembly alkalmazás projektfájljához:

<PropertyGroup>
  <RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup>

Az alkalmazás WebAssemblyre fordításához tegye közzé az alkalmazást. A Release konfiguráció közzététele biztosítja, hogy a .NET köztes nyelv (IL) csatolása is fusson a közzétett alkalmazás méretének csökkentése érdekében:

dotnet publish -c Release

A WebAssembly AOT összeállítása csak a projekt közzétételekor történik. Az AOT-fordítás nem használható, ha a projektet fejlesztés (Development környezet) során futtatják, mivel az AOT-fordítás általában néhány percet vesz igénybe a kis projekteken, és a nagyobb projektek esetében akár sokkal hosszabb időt is igénybe vehet. Az AOT-fordítás létrehozási idejének csökkentése folyamatban van a ASP.NET Core jövőbeli kiadásaihoz.

Az AOT által lefordított Blazor WebAssembly-alkalmazások mérete általában nagyobb, mint az alkalmazás mérete, ha .NET IL-be van fordítva:

  • Bár a méretkülönbség az alkalmazástól függ, az AOT által lefordított alkalmazások többsége körülbelül kétszer akkora, mint az IL-fordítású verzióké. Ez azt jelenti, hogy az AOT-fordítás használata a betöltési idő alatti teljesítmény rovására javítja a futásidejű teljesítményt. Az alkalmazástól függ, hogy megéri-e ez a kompromisszum az AOT-fordítással. Blazor WebAssembly processzorigényes alkalmazások általában az AOT-fordítás előnyeit élvezhetik a legjobban.

  • Az AOT által lefordított alkalmazások nagyobb mérete két feltételnek köszönhető:

    • A natív WebAssemblyben a magas szintű .NET IL-utasítások megjelenítéséhez további kód szükséges.
    • Az AOT nem vágja ki a felügyelt DLL-eket az alkalmazás közzétételekor. Blazor tükrözési metaadatokhoz dll-eket igényel, és támogatnia kell bizonyos .NET-futtatókörnyezeti funkciókat. Az ügyfél DLL-einek megkövetelése növeli a letöltés méretét, de kompatibilisebb .NET-felületet biztosít.

Jegyzet

A Mono/WebAssembly MSBuild tulajdonságairól és céljairól lásd: WasmApp.Common.targets (dotnet/runtime GitHub-adattár). A közös MSBuild tulajdonságok hivatalos dokumentációját a Blazor MSBuild konfigurációs beállítások dokumentálása (dotnet/docs #27395) terv szerint tervezik.

Teljesítmény

A teljesítményre vonatkozó útmutatásért tekintse meg ASP.NET core Blazor WebAssembly futtatókörnyezet teljesítményét:

  • Halomméret egyes mobileszköz-böngészőkben
  • Futtatókörnyezet újralinkelése
  • Egyetlen utasítás, több adat (SIMD)
  • A .NET IL vágása az idő előtti (AOT) fordítás után (.NET 8 vagy újabb)

Kivételkezelés

A kivételkezelés alapértelmezés szerint engedélyezve van. A kivételkezelés letiltásához adja hozzá a <WasmEnableExceptionHandling> tulajdonságot false értékkel az alkalmazás projektfájljában (.csproj):

<PropertyGroup>
  <WasmEnableExceptionHandling>false</WasmEnableExceptionHandling>
</PropertyGroup>

A WebAssembly kivételkezelésének engedélyezéséhez adja hozzá a <WasmEnableExceptionHandling> tulajdonságot true értékkel az alkalmazás projektfájljában (.csproj):

<PropertyGroup>
  <WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
</PropertyGroup>

További információ:

További erőforrások