9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jsonを圧縮して送ろう

Last updated at Posted at 2018-06-29

とあるソフトを開発していたとき。
サーバー側はPHP、クライアントはC#だった。画面に表示するデータのほとんどはPHP側が出力し、JSONでやりとりを行う構成。

ある画面で10000件くらいの大量の項目を転送する必要があった。ふつうに送るとさすがに容量が大きいもんですから遅くてあまりレスポンスが良くなかったので、どうしたもんかいのーと考えていたらgzipで圧縮して転送するというナイスな方法を見つけました。

Gzipの効果を見てみよう

こんなPHPを作ってみた。

<?php
$results = [];
for ($i = 0; $i < 10000; $i++) {
    $results[] = ["id" => md5($i)];
}
echo json_encode($results);

10000個のデータを作って返す、内容はmd5で生成しています。

これがだいたいどのくらいの容量になるのか。

410KBでした。

さあこれをGzipで圧縮して送ってみましょう。
圧縮するには以下のob_start("ob_gzhandler")を呼び出すだけです。

<?php
$results = [];
for ($i = 0; $i < 10000; $i++) {
    $results[] = ["id" => md5($i)];
}

ob_start("ob_gzhandler"); // <-

echo json_encode($results);

なお、使用するにはZlibモジュールとやらが必要になるそうです。

クライアント側もgzipに対応している必要があるのですが、C#のHttpClientは以下のサイトを参考にすれば対応することができますよ。

では結果をみてみましょう。

197KBになる、だいたい半分くらいになりました。
今回はmd5でランダムなデータを作ったんですが、繰り返しが多いデータだったらもっと圧縮率が高くなると思います。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?