在使用HTTP2/SPDY时,我应该缩小并连接javascript和CSS吗?

在使用HTTP2/SPDY时,我应该缩小并连接javascript和CSS吗?,javascript,css,http,minify,spdy,Javascript,Css,Http,Minify,Spdy,考虑到HTTP2(和SPDY)中连接重用和多路复用的优势以及gzip压缩的可用性,将缩小和连接步骤添加到构建过程中的努力是否合理?是的,出于以下原因,您仍然需要缩小和连接js和css文件: 脚本缩小和SPDY压缩是不同的。一个好的缩略器知道如何利用局部作用域,并用压缩友好的简短重复名称替换冗长的变量名称 SPDY将您的请求组合在一起,这样您就不必将脚本缝合在一起。但并非所有浏览器都支持SPDY SPDY 2和3是二进制不兼容的。当浏览器支持2,服务器播发3时,连接通过SSL返回HTTP 1.1

考虑到HTTP2(和SPDY)中连接重用和多路复用的优势以及gzip压缩的可用性,将缩小和连接步骤添加到构建过程中的努力是否合理?

是的,出于以下原因,您仍然需要缩小和连接js和css文件:

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

  • SPDY将您的请求组合在一起,这样您就不必将脚本缝合在一起。但并非所有浏览器都支持SPDY

  • SPDY 2和3是二进制不兼容的。当浏览器支持2,服务器播发3时,连接通过SSL返回HTTP 1.1;根本就没有SPDY福利

  • 通过一个请求加载10个文件在服务器端仍然会导致10次回迁。合并这些文件可以减少磁盘I/O

您的问题类似于“既然机器可以运行得更快,我是否可以不太在意编写高效的代码?”


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

当通过H2/SPDY提供资源时,测试是决定缩小和/或连接的唯一真正方法。

HTTP/2(H2)背后的思想是为流上的小型静态资源提供服务(单个多路传输TCP连接)。测试表明,“大多数”站点通过不连接资源(甚至不使用CDN)来提高速度。这完全取决于H2/SPDY上提供的资源的大小。我看到一个站点的速度提高了30%以上,而其他站点的速度没有变化

考虑到这一点,我的建议是通过缩小所有资源而不是将它们连接起来来进行测试。我还将测试服务所有公共资源(不使用CDN——这也取决于您的客户机在哪里)

资源:


  • 根据Chrome团队的Surma的说法,在H2上,您可以而且事实上应该停止捆绑,因为它毫无用处,并且允许更高效的浏览器缓存:

    (时间1:10)


    我认为缩小或混淆仍然是可取的,这取决于您的需要。

    我认为您声称不缩小/连接文件是“懒惰”的说法是没有帮助的,因为它没有上下文。如果我是从零开始的,我认为这是一个公平的要求,但是我在一个中型的遗留代码库上工作,业务涉众的时间压力很大,因此(a)实现这些事情并不是小事,(b)没有时间/金钱来做这些事情。我喜欢做很多事情,但是如果SPDY让我做了大部分事情,那么还有更重要的事情要做。考虑到你不是从零开始的环境,使用任何方便的方法来改进产品是有意义的,即使是边缘产品。我感觉到你的痛苦。保持你的头向上,伙计。minify+gzip将提供最大的压缩;但是,要权衡缩小的好处和javascript构建系统的成本。如果不使用源地图,Minified可能下载速度更快,但调试起来却很困难。设置和维护前端构建系统当然需要花费一定的人力。使用HTTP2(和SPDY)的一个主要好处是,您不必担心因为多路复用和连接重用而连接或绑定JavaScript(或图像到spritesheet中)。事实上,使用HTTP2时,最好将每个资源保留在自己的文件中,以便浏览器独立缓存每个资源。这样,当您更新jquery.js时,只需要将该文件发送到客户端,而不需要发送更大的捆绑js文件。至于缩小,请看一篇有趣的相关博客文章