媒介
在Core 9.0版本中新增的内容不算多,除了内置OpenAPI 外 应该就属MapStaticAssets中间件最有代价了,最初MapStaticAssets主要是为相识决Blazor静态资源加载缓慢而生的,固然只要是wwwroot下的任何静态资产都是可以使用TA平替UseStaticFiles的,因此在相识了TA的优势后 建议升级到9.0的小同伴都使用TA平替UseStaticFiles!
既有缺陷
通常,在我们既有的NETCore项目中,我们都是使用UseStaticFiles中间件来提供静态资产,不外TA存在以下的一些缺陷:
- 缺乏静态资源的传输压缩 (固然,可以搭配压缩中间件,大概容器压缩(如IIS动态压缩))
- 使用ETag进行低效缓存(依赖于文件修改时间戳,因此内容稳固时间戳变更将会导致重新加载)
- 缺乏指纹识别(欣赏器可能会缓存和重复使用旧版本的资产,从而导致应用更新后出现不一致,影响用户体验)
解决问题
MapStaticAssets旨在解决上述UseStaticFiles存在的一些缺陷:
- 在开发期间 gzip,在发布期间 gzip + brotli
- 全部资产都经过压缩,目标是将资产大小降到最低。
- 基于内容的 ETags:每个资源的 Etags 都是内容的 SHA-256 哈希的 Base64 编码字符串。 这可确保欣赏器仅在文件内容发生更改时重新下载文件。
- 指纹识别资源,通过资源唯一标识,可以防止欣赏器重复使用旧版本。当应用步伐更新时,指纹会发生变化,从而确保客户端始终收到最新的资产。
在MapStaticAssets内部的请求管道中TA做了下面这些事:
- 设置 ETag 和 Last-Modified 标头。
- 设置缓存标头。
- 使用 Caching Middleware。
- 如果可能,提供压缩的静态资产。
性能提升
下表表现了默认的 Razor Pages 模板中 CSS 和 JS 文件的原始大小和压缩大小:
文件原始压缩%缩减bootstrap.min.css16317.589.26%jquery.js89.62868.75%bootstrap.min.js78.52074.52%总计331.165.580.20%在使用Blazor开发业务系统时将节省大量传输宽带,极大的提升加载速度
不可替部分
固然UseStaticFiles仍然有TA不可替代的部分,比如虚拟文件提供者(如,嵌入的资产,其他磁盘路径资源,或网络资源等)
比如资源是嵌入到步伐集的环境下你仍然必须使用:- var embeddedFileProvider = new EmbeddedFileProvider(typeof(ISetting).Assembly, "Biwen.Settings");
- app.UseStaticFiles(new StaticFileOptions
- {
- FileProvider = embeddedFileProvider,
- OnPrepareResponse = ctx =>
- {
- ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=3600");
- }
- });
复制代码 结论
猛烈建议在可更换UseStaticFiles()的环境下使用MapStaticAssets()
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |