使用新的HTTP / 2协议,重复HTTP请求到同一服务器所产生的开销大大减少。
考虑到这一点,缩小和连接JavaScript / CSS文件以及将图像组合成精灵还有任何显着的性能优势吗?或者,当使用HTTP / 2时,这些做法是否不再有用?
答案 0 :(得分:47)
它们仍然有用。 HTTP / 2减少了其中一些做法的影响,但并未消除其影响。
缩小仍然有用。尽管HTTP / 2为消息头引入了新的压缩,但这与缩小(与消息体无关)无关。消息体的压缩算法是相同的,因此缩小可以节省与以前一样多的带宽。
连接和精灵的影响比以前更小,但它们仍会产生一些影响。下载多个文件而不是使用HTTP / 1的单个文件的最大问题实际上不是HTTP方面的问题,本身: 基于带宽的开销在单独请求每个文件时,但是当你完成一个文件时,拆除TCP / IP会话的基于时间的开销,然后为下一个文件启动一个新文件,并为你想要的每个文件重复这个文件,它会相形见绌。下载。
HTTP / 2的最大焦点是消除基于时间的开销:HTTP / 1.1尝试使用流水线操作,但它没有在浏览器中流行(Presto是唯一完全正确的引擎,和普雷斯托已经死了)。 HTTP / 2是另一种尝试,它改进了HTTP / 1.1的方法,同时也使这种事情变得非可选,并且它会更加成功。 它还可以通过压缩标头来消除基于带宽的开销,从而产生多个请求,但它无法完全消除这种开销,而且在下载多个文件时,仍然需要进行这些请求(作为单个TCP / IP会话的一部分,因此开销较小,但不是零)。因此,虽然连接和spriting的影响按比例更小,但仍然会产生一些影响,特别是如果您使用多个文件。
在连接和spriting方面,需要考虑的另一件事是压缩。 相似类型的连接文件往往比单个文件更好地压缩,因为压缩算法可以利用连接的数据片段之间的相似性。 类似的原则适用于精灵:将相似图像放在同一文件的不同区域通常会产生较小的文件,因为图像的压缩可以利用不同区域的相似性。
答案 1 :(得分:4)
到目前为止,所有答案都默认假设您要为每个页面下载所有.CSS和.JS文件。使用http / 2并保持.CSS和.JS文件分开的一个好处是,您只能删除所需的文件,而不是下载内容总是比下载它更快。
答案 2 :(得分:1)
是的,它仍然有用。
与gzip压缩一起,你的页面重量会减少。
想象一下,您使用的是一个非常慢的GPRS(56Kbps,500毫秒ping)网络。
你有50张小图片,30张javascripts和20张css文件。
这意味着,通过2个并行连接,您必须等待超过100 * 500毫秒的请求。
现在,每张图片大约3-4kb。这可能需要几毫秒(5-8?)。
现在,CSS文件和Javascript的范围从20Kb到600Kb。
这将以巨大的转移时间杀死您的网站。
减少传输文件的时间会提高速度。网站将加载。
所以,是,它仍然有用!
答案 3 :(得分:1)
缩小JS仍然可以减少许多符号的大小; inflatedJargonSymbolizerTokenManager
将成为_a
。我发现的一个例子表明,JQuery GZipped的大小仍然是JQuery.min GZipped的两倍。
我还想指出,虽然你没有暗示其他方面,但是破坏性的评论是正确的,事实上与维基百科写得不好的解释相矛盾; “连接”JavaScript文件现在可能不太有用。缩小它们仍然有其好处。只是想提一下,如果你碰巧在那里得到了一些信息。事实上,如果我不担心进入编辑战斗,我会自己编辑页面。
CSS可能减少符号的机会较少。从理论上讲,它只能得到空格和注释。
答案 4 :(得分:1)
这可能有点晚了,但我想指出一些应该涵盖的备选要点。
首先,缩小通常会对JavaScript采取某种程度的丑化,这会带来带宽以外的好处 - 它会阻止人们轻松分析代码,从而阻止普通用户使用详细的方法和想法进行恶意操作 - 甚至是精心构建的网站可能有这个问题。当然,这不能替代安全性,高级用户总是可以破译未经授权的代码。
另一个是并非所有浏览器或连接都将使用HTTP / 2,至少不会立即使用 - 所以如果某些HTTP / 2功能的性能在HTTP / 2客户端上几乎不可察觉,为什么不利于那些连接仍然通过HTTP / 1.1?
最后,在一天结束时,确定影响服务器速度的最佳方法是对其进行基准测试。