用途:指导在 Blazor WASM 与 Uno WASM 应用中启用 WebAssembly AOT 编译,并在下载体积与运行速度之间做取舍。版本基线为 .NET 8.0+,Blazor WASM AOT 自 .NET 6 起可用。
主要能力与要点:
- 编译模式权衡:IL 解释器体积最小、启动最快但执行最慢;全量 AOT 体积最大、执行最快但启动较慢;选择性 AOT 配合裁剪较为平衡。裁剪通过移除未用代码减小体积,AOT 会将剩余代码编译为原生 WASM 使体积增大,但执行更快,两者应配合使用。
- Blazor 启用方式:在 csproj 属性组设置 <RunAOTCompilation>true</RunAOTCompilation>,之后执行 dotnet publish -c Release。注意该属性不同于服务端 Native AOT 的 PublishAot;AOT 仅在 publish 时生效,dotnet run 与 build 不生效。
- 选择性 AOT:通过 <BlazorWebAssemblyLazyLoad Include="MyApp.Reporting.wasm" /> 标记非关键程序集,被懒加载的程序集改用 IL 解释执行。可配合 LazyAssemblyLoader 按需加载,或在 Router 的 OnNavigateAsync 中按路由加载。
- 裁剪配合:设置 PublishTrimmed、RunAOTCompilation 与 EnableTrimAnalyzer,发布管线先裁剪再 AOT。
- Uno WASM:Uno 5+ 与 .NET 8+ 使用标准 WASM 工作负载,配置同 Blazor;旧版 Uno.Wasm.Bootstrap 使用 WasmShellMonoRuntimeExecutionMode(Interpreter、InterpreterAndAOT、FullAOT)。裁剪可设 PublishTrimmed 与 TrimMode=link。
- Brotli 预压缩:publish 会生成 .br 与 .gz 文件,服务器需配置返回预压缩文件,可显著减小传输体积;Nginx 可启用 gzip_static、brotli_static 并设置 application/wasm 类型与缓存头;ASP.NET Core 通过 UseBlazorFrameworkFiles 与 UseStaticFiles 处理。可用 BlazorEnableCompression 关闭预压缩。
- 体积优化清单:启用裁剪、懒加载、Brotli 预压缩、选择性 AOT、按需启用 InvariantGlobalization,并关闭未用特性如 EventSourceSupport、HttpActivityPropagationSupport。
适用场景:CPU 密集计算、图像处理、数据转换、需要稳定执行性能的热点路径。限制与注意:带宽受限用户或简单 CRUD 应用不宜启用 AOT;AOT 会显著增加发布耗时;勿懒加载启动即需的程序集;需在浏览器 DevTools 中确认 content-encoding: br;发布体积与压缩收益随项目而异,资料未提供具体数值承诺。