为何我的Blazor Wasm应用每次页面刷新都会下载90个.wasm文件?
以下是几个常见的原因及解决思路:
服务器缓存策略未正确配置
Blazor WASM的runtime文件和拆分的程序集文件依赖浏览器缓存避免重复下载,核心是服务器要返回正确的Cache-Control等缓存响应头。
如果是ASP.NET Core托管的应用,在Program.cs里配置静态文件中间件时,要给_framework目录下的文件设置长期缓存(这些文件都带内容哈希,文件名变化才代表内容更新):app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { if (ctx.File.PhysicalPath.Contains("_framework")) { var headers = ctx.Context.Response.GetTypedHeaders(); headers.CacheControl = new CacheControlHeaderValue { Public = true, MaxAge = TimeSpan.FromDays(365) }; } } });若部署到第三方服务器(如IIS、Nginx),也要对应配置静态文件的缓存规则,确保带哈希后缀的文件能被长期缓存。
使用Debug模式发布/运行
Debug模式下生成的程序集没有添加内容哈希后缀,浏览器无法识别文件是否更新,会每次重新下载。必须切换到Release模式发布应用:dotnet publish -c Release发布后检查
_framework/_bin目录下的文件,正常应该是带哈希后缀的(比如YourApp.dll?xxxxxx)。浏览器缓存被禁用
检查浏览器开发者工具的「网络」标签,是否勾选了「禁用缓存」选项。如果开启这个选项,浏览器会忽略所有缓存,每次刷新都重新下载资源。测试时要关闭该选项,同时避免用隐私模式访问(隐私模式默认限制缓存)。程序集拆分或延迟加载配置异常
Blazor 8默认会自动拆分程序集,但如果自定义了延迟加载逻辑,或者路由配置有问题,可能导致每次导航都触发程序集重新加载。检查Program.cs中是否有强制重新加载程序集的代码,或确认延迟加载的组件是否正确注册。第三方包导致的缓存失效
部分第三方NuGet包生成的程序集可能没有正确添加哈希后缀,或依赖的资源未遵循缓存规则。可以检查发布后的_framework/_bin目录,确认所有.dll和.wasm文件都带有哈希标识,若某个包的文件没有哈希,可尝试更新包版本或联系包作者修复。
内容的提问来源于stack exchange,提问作者Diego

