Compilarea Dart pentru WebAssembly (WasmGC): Execuție Web la Viteză Nativă și Integrare cu Browserul în Dart

Comanda dart Dart 3.4+

Ghid modern de compilare Dart pe Web cu WebAssembly Garbage Collection (WasmGC): saltul de performanță de la dart2js la binar Wasm, randarea Flutter Web accelerată grafic cu Skwasm și interoperabilitatea cu dart:js_interop.

Sintaxă
dart compile wasm bin/app.dart -o build/app.wasm

Timp de peste un deceniu, rularea codului Dart în browser s-a bazat pe compilarea în JavaScript prin compilatoarele dart2js și dartdevc. Deși foarte optimizat, JavaScript impunea limite stricte: un model de obiecte dinamic, interpretare JIT în motoarele browserelor (V8, JavaScriptCore) și pauze imprevizibile de Garbage Collection.

Odată cu adoptarea standardului WasmGC (WebAssembly Garbage Collection) de către toate motoarele majore de navigare (Chromium, Firefox, Safari) și lansarea Dart 3.4+, Dart poate fi compilat direct în binar WebAssembly. Această tehnologie permite aplicațiilor Dart și Flutter Web să ruleze cu viteze de până la 3x mai rapide, cu încărcare aproape instantanee și un consum masiv redus de resurse CPU.

Tranziția de la dart2js la dart compile wasm
# Abordarea Clasică:
# Cod Sursă Dart ───► [dart2js] ───► Fisiere .js mari ───► Parsare JS lentă în browser

# Abordarea Modernă (Dart 3.4+ / WasmGC):
# Cod Sursă Dart ───► [dart compile wasm] ───► Binar compact app.wasm
#                                                     │
#                                                     ▼
#                                      Execuție directă WasmGC în browser!
#                                      - Fără pas de parsare text JS
#                                      - Instanțiere instantanee a binarului

Tabel Comparativ: Compilare WebAssembly vs JavaScript în Dart

Metrică de Randament WebAssembly (WasmGC) JavaScript (dart2js)
Timp de Pornire (Cold Start) Sub 200 ms (Decodare binară la viteze de magistrală) 600 – 1500 ms (Parsare și compilare text JS)
Cadre pe Secundă (FPS) 60 / 120 FPS stabile (Fără micro-întreruperi de layout) Fluctuații la animații complexe sau scroll intens
Integrare Garbage Collection Folosește GC-ul nativ ultra-rapid al browserului (WasmGC) Emulare a obiectelor pe heap-ul JavaScript
Interoperabilitate JS Prin noul pachet standard dart:js_interop Prin vechiul pachet dart:js / dart:html
Interoperabilitate Modernă cu JavaScript prin dart:js_interop
import 'dart:js_interop';

// Definirea unei interfețe JS externe folosind Extension Types:
@JS('console')
external JSConsole get console;

extension type JSConsole(JSObject _) implements JSObject {
  external void log(JSAny? message);
  external void warn(JSAny? message);
}

// Apelarea directă a ferestrei browserului:
@JS('window.alert')
external void jsAlert(JSString message);

void main() {
  console.log('Mesaj trimis din binarul Dart WasmGC direct în consola Web!'.toJS);
  jsAlert('Salut din WebAssembly!'.toJS);
}
Comandă de Compilare în Producție
# Compilare binar Wasm cu optimizări maxime de mărime și viteză:
dart compile wasm -O4 web/main.dart -o build/web/main.wasm