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 wirkt 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].