JITerpreter
Eintrag zuletzt aktualisiert am: 13.11.2023
Blazor WebAssembly bietet seit Version
.NET 8.0 neben dem Ahead-of-Timer-Compiler (
AOT) auch einen JITerpreter an als Ersatz für den bisherigen Interpreter an.
Der JITerpreter ist eine Mischung aus Interpreter und Just-in-Timer-Compiler
Ursprünglich gab es für
Blazor WebAssembly nur einen Interpreter. .NET-
DLLs in Form in
Microsoft Intermediate Language (
MSIL) in den
Webbrowser geladen und dort ständig interpretiert.
Seit Blazor 6.0 gibt es auch einen Ahead-of-Timer-Compiler (
AOT). Dieser bietet zwar schnellere Codeausführung zur Laufzeit, aber kompiliert nicht nur deutlich langsamer, sondern erzeugt auch wesentlich größere Kompilate im Vergleich zum Interpreter-Modus. Das liegt einerseits an der geringeren Ausdruckfähigkeit des WebAssembly-Bytecodes im Vergleich zu
CIL, zum anderen daran, dass auch im
AOT-Modus noch der
MSIL-Code mitgeliefert wird, weil der
AOT-Compiler in einigen Situationen auf den Interpreter zurückgreifen muss.
Seit
Blazor 8.0 gibt es anstelle des Interpreters den JITerpreter: eine Wortmischung aus
Just-in-Time-Compiler (JIT) und Interpreter. Er ist automatisch aktiv bei allen
Blazor WebAssembly-Anwendungen, die nicht explizit
AOT-kompiliert wurden. Der JITerpreter ersetzt zur Laufzeit Teile des Anwendungscodes durch WebAssembly-Bytecode. Das wi
rkt sich insbesondere bei interpretierten
Blazor WebAssembly-Anwendungen positiv auf die Ausführungsgeschwindigkeit aus (siehe Abbildung). Microsoft will den JITerpreter in Zukunft noch weiter ausbauen [
https://github.com/dotnet/runtime/issues/78428].