Java/.NET Performance Monitoring, Analysis, Diagnostics & Profiling - Application Performance Management |
Andreas Grabner氏が101 on HTTPS Web Site Performance Impact (dynaTrace Blog)において、HTTPSを使ったサイトのパフォーマンスを改善した事例を紹介している。Andreas Grabner氏は最近、onLoadイベントが発生するまで20秒ほどかかるサイトの分析を実施したという。このスタートアップのページには重たい画像もアニメーションも、処理の重いJavaScriptもないにも関わらず、とても重たいページだったという。このページは70%がSSLハンドシェークの処理に費やされていたとされ、これを改善することで最終的に14秒かかっていた部分を2秒にまで短縮したと説明されている。
オンラインバンクや顧客情報など、機密性の高いデータをやりとりする場合にはHTTPSが使われることが多い。HTTPSはHTTPと比較して、最初のコネクション確立時に実施されるSSLハンドシェークでオーバーヘッドが発生する。ブラウザのバージョンや設定にもよるものの、1つのページを開く場合には大抵は複数のコネクションが張られ通信が実施される。もちろん通信ごとに接続処理が行われる。結果として、HTTPSを使っていればそれの分だけSSLハンドシェークが負担になる。
Andreas Grabner氏は問題のサイトをdynaTrace AJAX Editionを使って分析。最終的に、HTTPリクエストの後、毎回closeが返っていることが明らかになったとしている。keep-aliveではなくcloseが返っているため、リクエストごとに毎回SSLハンドシェークが発生し、結果としてSSLハンドシェークだけで多大なリソースが消費されることになったというわけだ。closeのかわりにkeep-aliveを使うように設定を変更することで性能が改善したという。
最適化の一般的な方法としてはリクエスト数の制限、CDNの利用、クライアントサイドにおけるキャッシュの活用、リダイレクトの禁止などがあると紹介されているほか、YSlowで採用されているベストプラクティスBest Practices for Speeding Up Your Web Siteも紹介されている。またブラウザから警告ダイアログが表示されるかもしれないが、画像であるとかスクリプトであるとか、それほど重要ではないコンテンツは別ドメインから読み込むようにすることで高速化を実現する方法もあると説明がある。