6

我有一个关于 SPDY/HTTP2 的问题:通常你将多个 CSS 和 JS 文件连接到一个文件中以保存请求并获得更好的性能。我听说 SPDY/HTTP2 将多个请求组合成一个响应。这是否意味着我不再需要预先连接 CSS 和 JS 文件,因为这是由协议处理的?

换句话说:我可以像使用 HTTP1 一样使用<script source="moduleA.js"></script>和使用 SPDY/ HTTP2 吗?从响应性能的角度来看,这是否相同,但具有单独缓存每个文件的好处,以便我可以更改并保持缓存?<script source="moduleB.js"></script><script source="allScripts.js"></script>moduleB.jsmoduleA.js

4

3 回答 3

4

HTTP/2.0 尚不存在(AFAIK)——它仍然是一个提议的标准。但它似乎很可能会使用与 SPDY 类似的连接处理。

SPDY 不会将它们连接起来,而是在同一连接上多路复用请求 - 从网络的角度来看,效果是相同的。

是的,您不需要手动合并内容文件,是的,它们将被独立缓存。

于 2013-10-07T11:36:10.867 回答
3

SPDY3 和 HTTP2 在同一物理连接上多路复用请求。但即使是多路复用的,请求也可能按顺序为每个资源发送,由于往返时间等待而导致严重的减速。

SPDY3 和 HTTP2 都有一个称为“资源推送”(也称为“SPDY 推送”,不要与“服务器推送”混淆)的功能,它允许在没有客户端请求的情况下推送相关资源,而Jetty 项目- I我是一名提交者——据我所知,这是唯一一个实现该功能的人。

您可以在此视频中观看资源推送的实际操作:http ://webtide.intalio.com/2012/10/spdy-push-demo-from-javaone-2012/ 。

使用资源推送,您可以节省额外的往返来获取所有不同的 JS 文件,并且仍然可以从每个文件的浏览器缓存中受益。资源连接的全部意义在于减少获取所有所需资源所需的往返次数,而资源推送有助于解决该问题。

于 2013-10-07T21:38:13.347 回答
2

HTTP/2.0 允许多路复用,其中多个请求/响应流通过同一 TCP 连接交换数据。

因为创建和启动 TCP 连接的成本很高,所以 HTTP/2.0 的多路复用通常会比 HTTP/1.1 的半并行下载更快,在 HTTP/1.1 中,浏览器(重新)使用有限数量的 TCP 连接来执行给定数量的资源请求。

但是您的里程可能会有所不同。测量它。

作为旁注,您可能希望在开发和调试时分别引用所有库,但在部署时将 JS/CSS 捆绑并缩小到一个文件中。

于 2013-10-07T11:35:00.863 回答