「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
gzip転送を試してみた
Webページの表示を速くする方法の1つとして、HTML等のファイルをgzipで圧縮して転送する方法があります。
gzip転送に対応させる方法はいくつかありますが、PHPを使って簡単な実験を行ってみました。
ob_gzhandlerでgzip圧縮する
PHPには、出力をバッファリングする関数群があります(ob_startなど)。
また、その関数群の1つに、バッファリングした結果をgzip圧縮する「ob_gzhandler」という関数があります。
PHP化したHTMLのページで、その先頭と最後に以下のような記述を追加することで、gzip転送を行うことができます。
<?php ob_start("ob_gzhandler"); ?> 元のHTMLの内容 <?php ob_end_flush(); ?>
gzip圧縮の効果
上のPHPのコードでは、ページにアクセスがあるたびに、HTMLをgzip圧縮します。
そのため、サーバー側の処理時間が若干伸びます。
一方、サーバーからWebブラウザに送信されるデータは、圧縮によってサイズが減ります。
そのため、サーバーからの送信時間は短くなります。
試しに、当ブログのトップページで、gzip圧縮の効果を調べてみました。
Google Chromeのデバッグ機能の「Network」を使い、HTMLを受信する際の「Waiting」と「Receiving」の時間を測定しました。
「Waiting」は、HTTPリクエストを送信してから、HTMLが送られ始めるまでの時間で、サーバー側の処理にかかった時間を意味します。
また、「Receiving」は、HTMLを受信し終わるまでにかかった時間です。
gzip圧縮あり/なしで10回ずつページを読み込んで、Waiting/Receivingの平均を求めると、以下のような結果が得られました。
なお、表内の単位はミリ秒(=1,000分の1秒)です。
Waiting | Receiving | 合計 | |
---|---|---|---|
gzip圧縮なし | 38.1 | 101.8 | 139.9 |
gzip圧縮あり | 44.0 | 28.4 | 72.4 |
差 | +5.9 | -73.4 | -67.5 |
前述したように、gzip圧縮するとサーバー側の処理が増えますので、gzipありの方がWaitingの時間が長くなっています。
一方、通信するデータの量は減りますので、Receivingの時間は短くなっています。
上の結果では、Waitingの増加はわずか(約6ミリ秒)であるのに対し、Receivingの減少は大きいです(約73ミリ秒)。
差し引きで約67ミリ秒の時間を短縮することができています。
今回の実験では、HTMLファイルだけgzip転送したので、短縮できた時間はそれほど大きくはありません。
しかし、CSSやJavaScriptのファイルもgzip転送すれば、より効果が得られるはずです。