web-dev-qa-db-ja.com

NginxでSPDYを有効にした後の予期しないファイルダウンロードの速度低下

単純なWordPress静的サイトは完全にhttpsで実行されます。

Nginx conf here: http://Pastebin.com/BrP0LThT

前後の違いは次のとおりです。

listen       443 ssl;
listen       443 ssl spdy;

Nginx 1.8.0、SSLあり、SPDYなし:

Transitions.jsファイルからの応答:

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Sun, 28 Jun 2015 18:13:30 GMT
Content-Type: application/javascript
Last-Modified: Wed, 03 Dec 2014 14:19:08 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
ETag: W/"547f1bdc-5267"
Expires: Sun, 12 Jul 2015 18:13:30 GMT
Cache-Control: max-age=1209600
Content-Encoding: gzip

SPDYを使用した同じサーバーセットアップ:

同じjsファイルからの応答:

HTTP/1.1 200
cache-control: max-age=1209600
content-encoding: gzip
content-type: application/javascript
date: Sun, 28 Jun 2015 18:24:49 GMT
etag: W/"547f1bdc-5267"
expires: Sun, 12 Jul 2015 18:24:49 GMT
last-modified: Wed, 03 Dec 2014 14:19:08 GMT
server: nginx/1.8.0

SPDYを有効にすると、これらのファイルに対するサーバーの応答が大きく異なることに注意してください。

すべてをロードする合計時間はほとんど同じです。

それがかなり斜めの滝からまっすぐな垂直の落下に変わるという事実は、完全な力で多重化することが予想されます。

ただし、これらのjs、css、および画像アセットのすべてのTTFB緑色のバーは約280ミリ秒に増加し、コンテンツのダウンロード時間の青色のバーはほぼゼロからそれぞれ1秒以上になります。

詳細はこちら:

Note the uniform TTFB delays of about 280ms

それは偶然ではないほど均一すぎます。

iptablesはスロットルを示唆していません。 SPDYを有効にする以外は、nginxconfでも何も変更されていません。 nginx 1.8.0であるため、tcp_nodelayのバグでもありません。 confファイルまたはファイアウォールに特別な制限構成はありません。 keepalive_timeoutは75で、他のキープアライブオプションはデフォルトです。

どこを見ればいいですか?何を試すことができますか?何が問題なのでしょうか?

現在、28ものアセットが同時にダウンロードされているため、帯域幅が問題になる可能性があるため、帯域幅使用率のグラフを次に示します。ビジーなJSのダウンロードは0.7秒から2秒の間に発生します。奇妙な急降下を禁止し、帯域幅は最大(1.5Mbps)になるので、おそらくホスティング環境がここでも何らかの影響を及ぼします。

Bandwidth Stats

2
JayMcTee

あなたが経験していることは、SPDYの仕組みと一致していると思います。

「古い」HTTPSでは、ブラウザはシリアル方式でサーバーにリクエストを送信します。これは、最初のスクリーンショットに表示されているものです。

ただし、SPDYを使用すると、すべての要求が同時に送信され、その後、サーバーは最適と見なされる順序でファイルに応答します。これは、2番目のスクリーンショットに表示されているものです。すべてのリクエストの開始が同じ時点であることに注意してください。

サーバーが要求されたファイルを配信する順序は、サーバーの構成によって異なりますが、さらに重要なのは、リソースの優先順位です。アイデアは、JSファイルとCSSファイルを早期に送信して、Webサイトをペイントできるようにすることです。その後、SPDYは画像やその他のリソースを送信する必要があります。

DOMContentLoadedloadまでの時間は、SPDYとHTTPSの間で大きな違いはないことを示しているので、サーバーは正常に動作していると思います。より速いペイント時間を達成したい場合は、優先順位を調べてください。

ソース、および非常に興味深いさらなる読書:

以下のコメントで述べられているように、JayMcTeeは、彼の特定の状況が帯域幅によって引き起こされていることを発見しました-SPDYはすべての要求を同時に実行するため、帯域幅がより簡単に満たされ、連続して実行される場合よりも個々の要求が遅くなります。

2