前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASP.NET Core如何使用压缩中间件提高Web应用程序性能

ASP.NET Core如何使用压缩中间件提高Web应用程序性能

原创
作者头像
HueiFeng
修改2020-02-10 15:02:14
5180
修改2020-02-10 15:02:14
举报
文章被收录于专栏:HueiFeng技术专栏HueiFeng技术专栏

前言

压缩可以大大的降低我们Web服务器的响应速度,压缩从而提高我们网页的加载速度,以及节省一定的带宽.

何时使用相应压缩中间件

在IIS,Apache,Nginx中使用基于服务端的响应压缩技术。中间件的执行可能和服务端模块不匹配。HTTP.sys 和Kestrel server目前没有提供内置的压缩支持。

什么时候使用Response Compression Middleware:
  • 无法使用以下基于服务器的压缩技术时:
  1. IIS 动态压缩模块
  2. apache的GZIP压缩
  3. Nginx 压缩
  4. 直接托管:
  5. Http.sys 服务器
  6. Kestrel 服务器

如何添加MIME

中间件为压缩指定了一组默认的 MIME 类型:

  • application/javascript
  • application/json
  • application/xml
  • text/css
  • text/html
  • text/json
  • text/plain
  • text/xml
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCompression();
            services.AddRazorPages();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }
            app.UseResponseCompression();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }

默认是采用Brotli压缩

Brotli is a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, with a compression ratio comparable to the best currently available general-purpose compression methods. It is similar in speed with deflate but offers more dense compression.

Brotli 是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。

与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。

摘自:https://segmentfault.com/a/1190000009383543

  • MimeTypes:设定要进行压缩的MimeTypes
  • GzipCompressionProviderOptions:设置压缩方式(默认是CompressionLevel.Fastest快速压缩)
压缩前:
压缩后:

使用压缩的好处就是节省网络流量,压缩资源文件。但是消耗一点CPU性能.

gzip
  • 默认情况下, Brotli 压缩提供程序会随Gzip 压缩提供程序一起添加到压缩提供程序的数组中。
  • 他默认采用的是Brotli压缩,如果客户端不支持Brotli,客户端支持Gzip,则默认为Gzip.
   public void ConfigureServices(IServiceCollection services)
        {
           services.AddResponseCompression(options=> {
               options.Providers.Add<BrotliCompressionProvider>();
               options.Providers.Add<GzipCompressionProvider>();

           });
            services.AddRazorPages();
        }

有些MIME类型是需要我们自己为他将其加入压缩类型中的,我们可以从图中看到目前有一些未被压缩,那么我们可以将他手动增加一下类型.

    public void ConfigureServices(IServiceCollection services)
        {
           services.AddResponseCompression(options=> {
               options.Providers.Add<BrotliCompressionProvider>();
               options.Providers.Add<GzipCompressionProvider>();

               options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "image/x-icon" });

           });
            services.AddRazorPages();
        }

如何配置压缩级别

压缩级别

描述

CompressionLevel.Fastest

压缩应该尽快完成, 即使生成的输出未以最佳方式压缩。

CompressionLevel.NoCompression

不应执行压缩。

CompressionLevel.Optimal

即使压缩需要更长的时间, 也应以最佳方式压缩响应。

public void ConfigureServices(IServiceCollection services)
{
        services.AddResponseCompression();
        
            services.Configure<GzipCompressionProviderOptions>(options => 
                {
                        options.Level = CompressionLevel.Fastest;
                            });
                            })
}

安全协议压缩

可以使用EnableForHttps选项控制安全连接上的压缩响应,该选项默认情况下处于禁用状态。对动态生成的页面使用压缩可能会导致安全问题,例如CRIME和BREACH攻击。

  • EnableForHttps:是否对HTTPS封包进行压缩(默认是false)
        public void ConfigureServices(IServiceCollection services)
        {
           services.AddResponseCompression(options=> {
               options.Providers.Add<BrotliCompressionProvider>();
               options.Providers.Add<GzipCompressionProvider>();
               options.EnableForHttps = true;
               options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "image/x-icon" });

           });
            services.AddRazorPages();
        }

dotnet济南俱乐部组建中有兴趣的小伙伴可以加入QQ群:743523033

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么时候使用Response Compression Middleware:
  • 压缩前:
  • 压缩后:
  • gzip
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档