前端性能优化-对HTTP传输进行压缩

原创作品,请勿抄袭,翻版必究。转载请注明作者。

简介

资深的前端开发人员都知道,在web开发中,对js、css、图片、font等都要进行压缩,尽可能的减小文件的大小,减少前端下载的时间,从而提高网页响应的时间。特别是在移动端,这对用户的流量还有影响。不过本文中所提的压缩并不是指这情况,而是在js,css、图片、font等资源已经压缩了的基础上(当然,这一步非必要条件,压不压缩看你心情,资源文件的压缩跟http传输过程的压缩没关系),在http传输过程中的再次压缩。

HTTP1.1中的Accept-Encoding

在HTTP1.1开始,Web客户端可以通过Acceppt-Encoding头来标识对压缩的支持。客户端HTTP请求头声明浏览器支持的压缩方式,服务端配置启用压缩,压缩的文件类型,压缩方式。当客户端请求到达服务器,服务器响应时对请求资源进行压缩,返回给客户端浏览器,浏览器按照相应的方式进行解析。

先来看下天猫网站的案例。


天猫首页index.js的HTTP过程

在HTTP请求中,accept-encoding: gzip, deflate, sdch, br是指客户端浏览器(这里是我的chrome浏览器)支持的压缩方式。在HTTP响应中,content-encoding:gzip 是指服务端使用了gzip这种压缩方式。



在google的network中我们可以看到,index.js是5kb,这是传输过程中的大小。当我们把它的文件下载下来查看时发现他是9.62kb,压缩了44%。

不仅仅只是天猫,在国内大多数网站上都能看到使用这个方法来优化前端性能的身影。

压缩方式选择哪一种?

上面提到的压缩方式有这么多种,我们应该使用哪一个呢?事实上这点不用我们操心,选择gzip就可以了,参考Yahoo!工程师的说法,支持gzip的浏览器范围最广,使用gzip的压缩效果最佳。实际上经过我亲自考证,www.tmall.com、www.taobao.com、www.jd.com、www.suning.com、www.qq.com、www.baidu.com 这些大型网站都无一例外的使用了gzip这种压缩方式。

如何使用gzip进行压缩

怎么样才能使用HTTP的这个属性来压缩呢?这才是本文的重点。其实很简单,客户端不用任何配置,在服务端配置即可,服务器不同,配置方法也不尽相同。本文以tomcat为例,用我亲自测试的过程来展现。

(1)tomcat的配置

以我电脑tomcat安装目录为例,找到F:\software\apache-tomcat-7.0.54\conf文件夹下的server.xml



compress="on" 表示开启压缩。

compressionMinSize="2048"表示会对大于2KB的文件进行压缩。一般按照如此配置,可根据自己需求而定。

compressableMimeType是指将进行压缩的文件类型,对js,css,图片的压缩可以大大提升压缩效果。

tomcat的server.xml的配置按照上述进行配置,重启tomcat服务器。

(2)压缩前后对比,效果明显!

在我的demo中,有js,css,jpg图片,font,mp4等基本涵盖所有常用的资源类型。上面是未压缩前的情况,值得注意的是上面的status都是200,都是未缓存的情况。size一列显示了传输过程中的大小。页面整体响应时间大概在800ms左右。

接下来我们查看一下使用gzip压缩后的情况(特别值得注意的是,修改了server.xml后重启tomcat是无效的。需要在eclipse中删除,然后在新创建一个tomcat服务器,需要指向我们刚刚配置的tomcat)。


上图是使用gzip压缩后的情况,非常明显的可以看出,document从原来的8.5KB压缩到现在的1.5KB,压缩了82%,angular.js压缩了75%,yitalaUI压缩了61.5%,jpg的图片几乎没有怎么压缩,微乎其微,可见我们上面的配置需要修改,只需要对document,js,css压缩即可。我们没有对font文件和mp4文件进行压缩,所以上面大小不变。

另外特别值得注意的是整体响应时间减少了200ms,提高了25%?真的是这样吗?错了,因为传输过程的时间跟网络有关系,我在本地电脑测试,网络是极好的,上面实际上是看不出传输时间的改善。减少了200ms是其他不确定的因素起的作用。实际上如果网站的document的大小和css,js文件数量越多则效果越明显。如果有条件,你可以自行搭建环境测试。

gzip的浏览器兼容性

在8年前,即2008年,yahoo团队的《High.Performance.Web.Sites》一书中就指出大部分浏览器都支持gzip。现在浏览器都已更新换代好几代了,基本上都支持gzip。因此我们不需要考虑客户端不支持的情况(不支持的情况是非常严重的)。

下面是浏览器对gzip的支持情况:

Netscape 6+ (Netscape 4-5 does, but with some bugs).

Internet Explorer 5.5+ (July 2000) and IE 4 if set to HTTP/1.1.

Opera 5+ (June 2000)

Lynx 2.6+ (some time before 1999)

Firefox 0.9.5+ (October 2001)

Chrome since forever

Safari since forever (as far as I can tell)

弊端

对HTTP传输内容进行压缩是改良前端响应性能的可用方法之一,大型网站都在用。但是也有缺点,就是压缩过程占用cpu的资源,客户端浏览器解析也占据了一部分时间。但是随着硬件性能不断的提高,这些问题正在不断的弱化。

本文中提到的方法,读者可大胆的使用。国内国外大型的网站都在使用,前端的性能优化必须对这些细节非常注意,变量引起质变,如果每个地方你都极尽最佳性能,你开发出来的网站性能将会尤其突出。

我会不断的推出前端性能优化的各种方法(每周一至二篇文章),站在巨人的肩膀上,加上我个人的亲自测试和研究,用图文并茂的方式向大家介绍。请大家关注我。

第一篇,前端性能重要性

第二篇,前端性能优化-HTTP添加Expires头

第三篇,前端新能优化-对HTTP传输进行压缩

第四篇,前端性能优化-将CSS文件放在顶部

第五篇,前端性能优化-将Scripts放在底部

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 网站优化离不开前后端的互相协作,但是对于前端工程师来说,在保证后端技术方案不变时,能不能只利用前端技术来优化网站呢...
    留七七阅读 6,243评论 0 31
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 3,418评论 1 19
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • 沉默的大多数——王小波 40多岁就逝去的王小波,算起来,现在应该有60多岁了。 …………… 如果能活到现在,他极强...
    张大妞阅读 280评论 0 1
  • 躺在一片荷叶中央 随着风自由飘荡 不去问水流的方向 去远方还是回到故乡 闻到丝丝熟悉的香 就让它肆意盛放 不去问它...
    遥远的鱼223阅读 462评论 0 50