Su mobile il peso del bundle incide poco sull'esperienza: l'app è già installata. Sul web, invece, ogni kilobyte di main.dart.js è tempo che l'utente passa davanti a uno schermo bianco. Un'app Flutter Web non banale può facilmente superare i 3-4 MB di JavaScript, a cui si aggiungono il runtime CanvasKit, i font e le icone.
In questo tutorial avanzato vedremo una pipeline completa di ottimizzazione:
- misurare la baseline in modo ripetibile (gzip/Brotli, source map, Lighthouse);
- spezzare il bundle con il deferred loading di Dart (
deferred as+loadLibrary()), integrandolo con il router; - scegliere il renderer giusto e provare la compilazione WebAssembly (skwasm) con gli header COOP/COEP;
- snellire gli asset: tree shaking delle icone, subset dei font, immagini moderne;
- governare la cache con il bootstrap di Flutter e il service worker;
- bloccare le regressioni con un performance budget nella CI.
Prerequisiti: Flutter 3.22 o successivo (nuovo
flutter_bootstrap.js), Dart 3, familiarità congo_routere con la build release per il web.