使用HTTP2/SPDY时,我应该对JavaScript和CSS进行缩小和合并吗?

13

鉴于HTTP2(和SPDY)中连接重用和多路复用的优势以及gzip压缩的可用性,是否有必要在构建过程中添加缩小和合并步骤?


2
使用HTTP2(和SPDY),其中一个主要的好处是您不需要担心连接或捆绑JavaScript(或图像到精灵表)的问题,正是由于多路复用和连接重用。实际上,使用HTTP2,将每个资源保留在其自己的文件中是有优势的,这样浏览器可以独立缓存每个资源,这样当您更新例如jquery.js时,只需将该文件发送给客户端而不是更大的捆绑js文件。至于缩小,参见https://dev59.com/g3RA5IYBdhLWcg3w1BqW - gx0r
3个回答

5
根据来自Chrome团队的Surma所说,在H2上,您可以并且应该停止捆绑,因为它是无用的,并且可以允许更有效的浏览器缓存: https://www.youtube.com/watch?v=w--PU4HO9SM (时间1:10)
我认为根据您的需要,缩小或混淆仍然可能是可取的。

一个有趣的相关博客文章可阅读:https://blog.cloudflare.com/introducing-http2/ - Jorge Orpinel Pérez

2

测试是决定是否在通过H2/SPDY提供资源时缩小和/或合并的唯一真正手段。

HTTP/2(H2)的理念是通过流(一个单一多路复用TCP连接)提供小型静态资源。测试表明,“大多数”网站通过不合并资源(甚至不使用CDN)可以获得速度提升。这完全取决于在H2/SPDY上提供的资源大小。我见过一些网站在不改变任何内容的情况下,其速度提高了30%以上,而其他网站则没有任何变化。

基于此,我的建议是通过缩小所有资源并不进行合并来进行测试。我还建议测试提供所有常见资源(不使用CDN - 这也取决于您的客户在哪里)。

资源:

  1. Akamai
  2. 专栏作家Patrick Stox
  3. HTTP/2 101 (Chrome Dev Summit 2015)

0

是的,你仍然需要对js和css文件进行缩小和合并,原因如下:

  • 脚本缩小和SPDY压缩不同。一个好的缩小器知道如何利用局部作用域,并用短重复的名称替换冗长的变量名,这些名称易于压缩。

  • SPDY将您的请求组合在一起,因此您无需将脚本拼接在一起。但并非所有浏览器都支持SPDY。

  • SPDY 2和3不兼容。当浏览器支持2且服务器广告3时,连接会回退到通过SSL的HTTP 1.1;根本没有SPDY的好处。

  • 通过一个请求加载10个文件仍然会在服务器端产生10个获取。合并文件可以减少磁盘I/O。

你的问题类似于“现在机器运行得更快了,我还需要关心编写高效代码吗?”

答案是否定的。不要偷懒。正确编码。


6
我认为你的断言,即不压缩/合并文件是“懒惰”的说法没有提供上下文不太有帮助。如果我从零开始,那么这个说法还算公正,但是我正在处理一个中大型的旧代码库,并且有业务利益相关方的时间压力,因此 (a) 实现这些事情并不是小菜一碟,(b) 没有时间/金钱来做这些事情。我很想做很多事情,但如果SPDY能让我实现目标的大部分,那么就有更重要的事情需要处理了。 - Euan
3
考虑到你不是从零开始,使用方便的方法来改进产品是有意义的,即使只会有微小的改善。我理解你的痛苦。保持乐观,朋友。 - Schien
minify+gzip可以提供最大的压缩效果;然而,需要权衡代码压缩的好处和使用JavaScript构建系统的成本。虽然经过压缩的代码下载速度可能更快,但如果不使用源映射,则难以进行调试。当然,设置和维护前端构建系统也需要一定的劳动力成本。 - gx0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接