Blazor WASM项目AOT编译裁剪后最小体积及发布配置问询
关于Blazor WebAssembly项目Wasm文件大小的优化疑问
测试操作步骤
- 创建空Blazor WebAssembly项目:
dotnet new blazorwasm -o BlazorWasm
- 在项目文件中添加优化配置:
<RunAOTCompilation>true</RunAOTCompilation> <WasmStripILAfterAOT>true</WasmStripILAfterAOT> <WasmEnableExceptionHandling>false</WasmEnableExceptionHandling> <InvariantGlobalization>true</InvariantGlobalization> <InvariantTimezone>true</InvariantTimezone>
- 执行发布命令:
dotnet publish
- 发布后查看
bin/Release/net9.0/publish/wwwroot/_framework目录下的文件大小:
9.4M Nov 13 14:18 dotnet.native.gsspae0k3f.wasm* 3.3M Nov 13 14:18 dotnet.native.gsspae0k3f.wasm.gz 2.2M Nov 13 14:18 dotnet.native.gsspae0k3f.wasm.br
我的理解:未压缩的dotnet.native.wasm大小为9.4M,经Brotli压缩后可达到2.2M。
疑问
- 该结果是否正常?
- 是否还有遗漏的发布优化配置?
解答
结果是否正常
这个结果是正常的。对于启用AOT编译的.NET 9空Blazor WebAssembly项目,9.4M的未压缩Wasm体积、2.2M的Brotli压缩后体积符合当前版本的优化水平。AOT编译虽会增大未压缩文件体积(相比JIT模式),但能大幅提升运行时性能,而Brotli压缩后的体积已得到有效控制,适合生产环境部署(现代浏览器默认支持Brotli解压)。
可补充的优化配置
除已启用的配置外,还可尝试以下优化项进一步压缩体积:
- 开启Linker深度裁剪:明确添加
<PublishTrimmed>true</PublishTrimmed>,配合<TrimMode>full</TrimMode>(需注意代码兼容性,避免反射逻辑被误裁剪),移除未使用的框架和项目代码。 - 压缩附属程序集:添加
<WasmCompressSatelliteAssemblies>true</WasmCompressSatelliteAssemblies>,对非默认语言的附属程序集进行压缩,减少多语言场景下的体积。 - 启用SIMD支持:添加
<WasmEnableSIMD>true</WasmEnableSIMD>,在支持SIMD的浏览器中提升性能的同时,部分场景下可小幅优化体积。 - 禁用调试符号:发布时添加
<DebugType>none</DebugType>和<DebugSymbols>false</DebugSymbols>,避免调试符号文件占用额外体积。
另外,部署时需确保服务器配置了Brotli或Gzip压缩的静态文件服务,让客户端实际下载压缩后的文件,进一步降低传输体积。
内容的提问来源于stack exchange,提问作者Felix F Xu
相关产品推荐
相关产品推荐

