PHP
HTML
JavaScript
nginx
http2

nginx1.12.2でもhttp/2 Server Pushに対応していたという事実

http/2 Server Pushの導入

 技術系情報掲載システムのレスポンスを少しでも上げようと、http/2 Server Pushを導入してみた。CentOS7の場合、無設定のyumだとnginxの1.12.2が入る。Web上の情報を参照すると対応は1.13.9以降なので、リポジトリ設定を変更し最新版をインストールした。結果、バージョンは1.15.2となった

 その後、Server Pushのためのプログラムの追加作業を行う。コンテンツ中に含まれる画像リンクを元に、linkヘッダを吐き出すようにした

結果

 システムはSPA(Single Page Application)で、データはAjaxを利用して送信している
 最初にあるttisが画像のリンクを含んだテキストデータを送信しており、linkヘッダの添付もここで行っている
 結果だけ見るとAjaxでのやりとりでもServer Pushは正常に動作するようだ

linkヘッダを付けない場合

image.png

linkヘッダを追加した場合

image.png

 linkヘッダ付けない場合は画像のアドレスをブラウザが受け取り、再度サーバに要求する形になる。そのためttisがデータを受け渡した後、ラグが発生する。linkヘッダを付けた場合は、ttisのテキストコンテンツ送信終了直後に画像の送信が始まっている。30ms程度ではあるが、確実に総合的な時間が短くなっている

本番サーバに適用

 テストがうまくいったので、本番サーバにデプロイする。gitでpullするだけの簡単な作業だ。本番サーバのnginxのバージョンは1.12.2なので、こちらもアップデートをかけなければならない・・・と思っていた

 とりあえずアップデート前にデプロイの状態を確認するため、普通に動かしてみた。するとnginx1.12.2の状態でも、テストサーバでlinkヘッダを追加した場合と同じ動きをしている

 ちょっ、これって前から対応してた?

 試しに本番サーバのlinkヘッダ出力をいじって、存在しない画像のIDを設定してみる

image.png

 明らかにlinkヘッダに反応している。つまりnginxのバージョンを上げなくても、Server Pushは使えるということだ

 しかしぐぐってみても、1.13.9で対応したという話ばかりだ

まとめ

 バージョン・・・いや、別にいいんだけど、なんか釈然としない

 実際にシステムを操作してみると、画像表示までの一瞬のラグが消え、たかが30msでも意外に体感できるものなのだという結果だった