Lightning Blog
Blazor記事イメージ画像

【Blazor】 gzip形式でデータを圧縮する方法

更新日:2023/09/03
Blazorでは、gzip形式でデータを圧縮して通信することができます。 gzip形式でデータを圧縮してWEBアプリケーションと通信する方法について解説します。

    目次

  • gzip形式でデータを圧縮するメリット
  • Blazorアプリケーションの設定
  • Webサーバーの設定

gzip形式でデータを圧縮するメリット

セクション画像

圧縮されたデータを送信することで、通信速度が向上します。 これによって、WEBページやアプリケーションの読み込み時間が短縮され、UX向上が見込めます。 特に、低帯域幅のユーザーやモバイルデバイスの利用者にとっては効果的です。 また、SEO対策にも繋がりますので、設定しておいて損はありません。


Blazorアプリケーションの設定

セクション画像

Gzip形式でデータ圧縮を行い、Blazorアプリ側とServer側の設定の2つが必要になります。 まずはBlazor側で設定を行います。 Program.csを編集していきます。


using Blazor_GzipCompression.Data;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.ResponseCompression;
using System.IO.Compression;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();

// 圧縮設定を追加
builder.Services
    .Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();

// 圧縮を使用する
// ※ app.UseStaticFiles()の前に必ずおくこと
app.UseResponseCompression();

app.UseStaticFiles();

app.UseRouting();

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

14,15行目で圧縮の方式を設定します。 CompressionLevelで圧縮方式を変更することができます。 圧縮方式によって、圧縮する速度を優先するか圧縮サイズを小さくするのを優先するかを選択できます。 各圧縮方式については以下の表を確認してみてください。

圧縮レベル 説明
CompressionLevel.Fastest 圧縮速度を優先する
CompressionLevel.Optimal 速度とサイズをバランスよく圧縮
CompressionLevel.SmallestSize サイズ優先で圧縮する
CompressionLevel.NoCompression 圧縮しない

また、データ圧縮を行うために、30行目のapp.UseResponseCompression()が必要になります。 この文は32行目のapp.UseStaticFiles()より先に記述する必要があるので、注意してください。


Webサーバーの設定

セクション画像

Webサーバーの設定は利用しているサーバーよって異なります。 詳しくは各Webサーバーのgzip圧縮を有効にする方法について調べてみてください。

参考までに、Nginxの場合の設定方法について簡単に解説します。 Nginxの場合は設定ファイルに以下のコードを追加します。 必要に応じてgzip_typesに圧縮したいMIMEタイプを設定してください。


gzip on;
gzip_types text/css application/javascript application/json application/font-woff application/font-tff image/gif image/png image/jpeg application/octet-stream;

設定したら、以下のコマンドでNginxを再起動しましょう。


systemctl restart nginx

これで問題なく起動するはずです。 gzipによる圧縮が有効かを確認するには、以下のコマンド使用します。 [Webサーバーのドメイン]の部分はご自身のアプリケーションのドメインへ置き換えてください。


curl -I -H 'Accept-Encoding: gzip,deflate' Webサーバーのドメイン

コマンド結果にContent-Encoding: gzipという記述があれば、問題なく圧縮できていると確認できます。


HTTP/1.1 200 OK
Server: nginx/1.10.1
Date: Tue, 15 Nov 2022 14:22:01 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.4.33
Link: ; rel="https://api.w.org/"
Link: ; rel="alternate"; type="application/json"
Link: ; rel=shortlink
Content-Encoding: gzip  ←この記述があれば圧縮できています

ブログ内の記事で書かれているサンプルコードは、GitHubから確認する事ができます。 是非参考にしてみてください。

この本では、Blazorの基本から高度なテクニックまで、実際のプロジェクトに役立つ知識を網羅しています。 初心者から経験者まで、Blazorを扱うすべての開発者にとっての必読書です。 この記事の執筆者も参考にした「Blazor入門」で、あなたのBlazorスキルを飛躍的に向上させませんか?

合わせて読みたい

カード画像
RazorファイルをHTMLとC#に分割する

Blazorはコンポーネント駆動フレームワークで、.razorファイルのHTMLとC#コードの分割方法(コードビハインド)を2つ紹介。一つは[Partialクラス]を使用し、もう一つは[継承]を利用。選択方法はプロジェクトの要件により変わるため、適切な方法を選ぶことがキーとなります。

更新日:2023/09/06

カード画像
NavigationManagerの使い方

BlazorのNavigationManagerは、クライアントサイドのルーティングを制御するクラスで、URLの変更やページの表示を管理します。サービスを挿入することでNavigationManagerを使用でき、様々な機能が提供されます。例えば、URLの取得、ベースURIの取得、ページ遷移の制御、URL変更時のイベント通知などがあります。実際の適用例として、ボタンクリックによるページ遷移を示しています。

更新日:2023/07/25

An error has occurred. This application may no longer respond until reloaded. Reload 🗙