1. 程式人生 > 其它 >asp.net core系列 77 webapi響應壓縮

asp.net core系列 77 webapi響應壓縮

一.介紹

  背景:目前在開發一個爬蟲框架,使用了.net core webapi介面作為爬蟲呼叫入口,在呼叫 webapi時發現爬蟲耗時很短(1秒左右),但客戶端獲取響應時間卻在3~4秒。對於這個問題考慮使用響應壓縮技術。

  網路頻寬是一種有限資源。 減小響應大小通常可顯著提高應用的響應速度。 減小有效負載大小的一種方式是壓縮應用的響應。

  在 IIS、Apache 或 Nginx 中是使用基於伺服器的響應壓縮技術。考慮到動態壓縮以及減少伺服器的配置,這裡介紹.net core中介軟體來實現響應壓縮。

  壓縮的事項:

    1)能夠壓縮的包括:CSS、JavaScript、HTML、XML 和 JSON。

    2)對圖片等資產不會壓縮,因為壓縮的位元組只會小幅減少,而被處理壓縮所花費的時間所掩蓋。

         3)不要壓縮小於約 150-1000 位元組的檔案。

    4)客戶端請求時通過Accept-Encoding來指定壓縮型別,中介軟體支援二種常用的壓縮型別如下:

   Accept-Encoding: br,gzip
      --br是指Brotli 壓縮格式,預設的壓縮方式。
      --gzip是指Gzip壓縮格式。

   5)中介軟體為壓縮指定一組預設的 MIME 型別:     

      application/javascript
      application/json
      application/xml
      text/css
      text/html
      text/json
      text/plain
      text/xml

  具體介紹看官方文件:https://docs.microsoft.com/zh-cn/aspnet/core/performance/response-compression?view=aspnetcore-5.0

二. 配置壓縮中介軟體

  使用壓縮中介軟體很簡單,程式碼如下:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseResponseCompression();
    }
}

  

三.演示

  客戶端請求可以是Postman,Fiddler, RestSharp等,下面使用RestSharp來請求爬蟲介面獲取資料,預設RestSharp請求頭帶了Accept-Encoding: gzip, deflate

  3.1 未使用響應壓縮技術,請求使用fiddler監聽

    

     1)請求頭statistics選項卡中,介面耗時4.822秒

     2)  響應Transformer選項卡中,響應位元組572,839

     3)  響應TextView能直接看到明文

  3.2 使用響應壓縮技術,請求使用fiddler監聽

    

     1)請求頭statistics選項卡中,介面耗時1.182秒

     2)  響應Transformer選項卡中,響應位元組98,930

     3)  響應TextView選項卡中,不能直接看到明文

     4)響應Headers選項卡中,Content-Encoding:gzip