一个简单的 WordPress 静态站点完全在 https 上运行。
Nginx conf在这里: http: //pastebin.com/BrP0LThT
之前/之后的唯一区别是:
listen 443 ssl;
listen 443 ssl spdy;
带有 SSL 的 Nginx 1.8.0,没有 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 秒。
详细看这里:
这一切都太统一了,不可能是巧合。
iptables 不建议任何节流。除了启用 SPDY 之外,nginx conf 中也没有任何变化。因为它是 nginx 1.8.0,所以也不是 tcp_nodelay 错误。我的 conf 文件或防火墙中没有特殊的限制配置。keepalive_timeout 为 75,其他 keepalive 选项为默认值。
我应该去哪里看?我可以尝试什么?可能是什么问题?
由于带宽可能是一个问题,现在多达 28 个资产同时下载,这是带宽利用率图表。繁忙的 JS 下载发生在 0.7s 和 2s 之间。除非出现奇怪的下降,带宽确实会达到最大值(1.5Mbps),所以也许托管环境在这里也有一些影响。
我相信您所经历的与 SPDY 的工作方式是一致的。
在“旧”HTTPS 中,浏览器将以串行方式向服务器发送请求,这就是您在第一个屏幕截图中看到的内容。
然而,使用 SPDY,所有请求都是同时发送的,之后服务器以它认为最佳的顺序响应文件。这就是您在第二个屏幕截图中看到的 - 请注意所有请求的开始时间都在同一时间点。
服务器交付请求文件的顺序取决于服务器配置,但更重要的是,取决于资源优先级。想法是提前发送JS和CSS文件,这样网站就可以画了。之后,SPDY 应该发送图像和其他资源。
因为您指出 SPDY 和 HTTPS 之间的时间
DOMContentLoaded
并load
没有显着差异,所以我认为您的服务器运行正常。如果您想获得更快的油漆时间,请考虑优先级。来源,以及非常有趣的进一步阅读:
正如下面评论中所说,JayMcTee 发现他的具体情况是由带宽引起的——由于 SPDY 同时执行所有请求,带宽会更容易被填满,导致单个请求比串行执行时更慢。