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ヘッダを付けない場合
linkヘッダを追加した場合
linkヘッダ付けない場合は画像のアドレスをブラウザが受け取り、再度サーバに要求する形になる。そのためttisがデータを受け渡した後、ラグが発生する。linkヘッダを付けた場合は、ttisのテキストコンテンツ送信終了直後に画像の送信が始まっている。30ms程度ではあるが、確実に総合的な時間が短くなっている
本番サーバに適用
テストがうまくいったので、本番サーバにデプロイする。gitでpullするだけの簡単な作業だ。本番サーバのnginxのバージョンは1.12.2なので、こちらもアップデートをかけなければならない・・・と思っていた
とりあえずアップデート前にデプロイの状態を確認するため、普通に動かしてみた。するとnginx1.12.2の状態でも、テストサーバでlinkヘッダを追加した場合と同じ動きをしている
ちょっ、これって前から対応してた?
試しに本番サーバのlinkヘッダ出力をいじって、存在しない画像のIDを設定してみる
明らかにlinkヘッダに反応している。つまりnginxのバージョンを上げなくても、Server Pushは使えるということだ
しかしぐぐってみても、1.13.9で対応したという話ばかりだ
まとめ
バージョン・・・いや、別にいいんだけど、なんか釈然としない
実際にシステムを操作してみると、画像表示までの一瞬のラグが消え、たかが30msでも意外に体感できるものなのだという結果だった