起因
突然发现博客在从Nancy切换到Asp.Net Core的时候,没有对静态资源进行压缩.其实在Asp.Net Core对静态文件进行压缩响应,是件很方便的事情,因为有现成的中间件,只需要简单配置开启就行了.
下面看一下如何开启响应压缩中间件:
using System.IO.Compression;
using Microsoft.AspNetCore.ResponseCompression;
namespace QiuFengBlog
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
_ = builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
_ = builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
_ = builder.Services.AddResponseCompression(options =>
{
options.MimeTypes = ResponseCompressionDefaults.MimeTypes;
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
});
_ = builder.Services.AddControllersWithViews(options =>
{
}).AddNewtonsoftJson();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
_ = app.UseExceptionHandler("/Home/Error");
}
_ = app.UseResponseCompression();
_ = app.UseStaticFiles();
_ = app.UseRouting();
_ = app.UseAuthorization();
_ = app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
}
}
}
关于默认配置对那些是进行压缩响应的,我们看一下ResponseCompressionDefaults配置:
public class ResponseCompressionDefaults
{
public static readonly IEnumerable<string> MimeTypes = new[]
{
"text/plain",
"text/css",
"application/javascript",
"text/javascript",
"text/html",
"application/xml",
"text/xml",
"application/json",
"text/json",
"application/wasm",
};
}
若是感觉不满足我们的需要,可以按需要增加.甚至不使用ResponseCompressionDefaults,
var newMimes = new string[]
{
"application/pdf",
"audio/mpeg",
"audio/x-mpegurl",
"image/gif"
};
_ = builder.Services.AddResponseCompression(options =>
{
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(newMimes);
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
});
下面我们先看看未开启压缩请求大小:
开启压缩响应中间件后请求大小:
开启压缩响应中间件后,博客请求大小减少了将近三分之二,请求完成时间也差不多是减少了三分之二.还是很有效果的.