如何在Asp.Net Core开启压缩响应中间件,提高响应和加载速度
起因
突然发现博客在从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);
//配置br压缩,以最快的方法完成压缩
_ = builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
//配置gzip压缩,以最快的方法完成压缩
_ = builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
//1. 添加响应压缩中间件
_ = builder.Services.AddResponseCompression(options =>
{
options.MimeTypes = ResponseCompressionDefaults.MimeTypes; //使用默认的配置
options.Providers.Add<BrotliCompressionProvider>(); //优先使用br方式压缩响应
options.Providers.Add<GzipCompressionProvider>(); //使用gzip方式压缩响应
});
// Add services to the container.
_ = builder.Services.AddControllersWithViews(options =>
{
}).AddNewtonsoftJson();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
_ = app.UseExceptionHandler("/Home/Error");
}
//2. 使用压缩响应中间件
_ = app.UseResponseCompression();
_ = app.UseStaticFiles();
_ = app.UseRouting();
_ = app.UseAuthorization();
_ = app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
}
}
}
关于默认配置对那些是进行压缩响应的,我们看一下ResponseCompressionDefaults配置:
public class ResponseCompressionDefaults
{
/// <summary>
/// Default MIME types to compress responses for.
/// </summary>
// This list is not intended to be exhaustive, it's a baseline for the 90% case.
public static readonly IEnumerable<string> MimeTypes = new[]
{
// General
"text/plain",
// Static files
"text/css",
"application/javascript",
"text/javascript",
// MVC
"text/html",
"application/xml",
"text/xml",
"application/json",
"text/json",
// WebAssembly
"application/wasm",
};
}
若是感觉不满足我们的需要,可以按需要增加.甚至不使用ResponseCompressionDefaults,
//增加这些文件类型进行压缩响应
var newMimes = new string[]
{
"application/pdf", //pdf
"audio/mpeg", //mp3
"audio/x-mpegurl", //m3u
"image/gif" //gif
};
//1. 添加响应压缩中间件
_ = builder.Services.AddResponseCompression(options =>
{
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(newMimes); //增加新mime类型配置
options.Providers.Add<BrotliCompressionProvider>(); //优先使用br方式压缩响应
options.Providers.Add<GzipCompressionProvider>(); //使用gzip方式压缩响应
});
下面我们先看看未开启压缩请求大小:
开启压缩响应中间件后请求大小:
开启压缩响应中间件后,博客请求大小减少了将近三分之二,请求完成时间也差不多是减少了三分之二.还是很有效果的.
秋风
2022-12-24