网站性能优化(一)减少HTTP请求数量

大部分网站的响应时间都花在HTTP请求,尤其是资源文件请求。

当然,HTTP 1.1 中已经支持了持久连接-keep-alive,即一个TPC/IP连接中,可以连续发起多次HTTP请求。随后,采用“管线化”技术,能够做到同时并行发送多个HTTP请求,而不需要一个接一个等待响应(Chrome目前支持在一个域名domain下,同时发起6个并行的HTTP请求)。尽管这样,为了进一步提高网站性能,还是需要考虑如何有效的减少HTTP请求数量。

1. 图片:雪碧图,图标字体文件,data:url

优化图片有很多方式,除了压缩,最常见得就是雪碧图,即把多张小图片合并为一张图,利用CSS -background-position调整图片显示位置。这种方式适用面比较广泛,缺点是,如果一张小图,需要N个颜色,就必须做N个不同颜色的小图,合并到大图里面。

所以,如果需要大小统一并颜色自定义的图片,那么,图标字体文件最好不过了。比如流行的font-awesome(http://fontawesome.io/), icomoon(https://icomoon.io/, 支持图片自定义)等等。只需要引入字体文件,然后即能够随心所欲的使用各类图片,利用CSS定义图标颜色。

data:url模式可以在页面中渲染图片但无需额外的HTTP请求,格式如下:

<img scr="data:image/jpg;base64, xxxxxxxxxxxxxxxx">

这个的缺点是,如果一张图片在多个页面被用到,无法利用浏览器缓存。为了解决这个问题,我们可以换个思路,把图片数据放在CSS文件里面定义,比如:

.imageA {
   background-image: url(data:image/jpg;base64, xxxxxxxxxxxxxxxx);
}

这样即可以利用浏览器缓存技术缓存CSS文件,又可以避免额外的图片请求。

注意:移动端不建议用src="data:image...",性能非常不好。

2. 合并JS和CSS文件

这个是最常用的做法。

利用项目构建工具,如gulp, grunt, webpack等等,都可以做到JS或者CSS文件的压缩,合并。只不过,合并后文件大小如何,需要斟酌而定。如果仅仅为了减少HTTP请求开销,而下载一个巨大的JS或CSS,反倒会延长网站渲染时间,导致白板或者页面卡顿。

小贴士:

HTTP 1.1默认在request header里面开启gzip。
使用gzip编码来压缩HTTP响应包,由此可以减少网络响应时间。
例子:Accept-Encoding:gzip,

3. 充分利用浏览器缓存

如果图片或者脚本,样式文件内容比较固定,不经常被修改,那么,尽可能利用缓存技术,减少HTTP请求次数或文件下载次数。

命中浏览器缓存分为两类:强缓存,协商缓存。

  • 强缓存:不会发起HTTP请求,直接从浏览器缓存中读取文件。
    • HTTP 1.0中,采用Expires头指定资源过期时间;
    • HTTP 1.1中,采用Cache-Control: max-age指定资源被缓存多久;
  • 协商缓存:向服务器发起HTTP请求,如果资源文件并未更新,response响应码即为304,随后从浏览器缓存中下载该文件,并不会从服务器下载。
    • HTTP 1.0中,采用Last-Modified(response header)和If-Modified-Since(request header)来指定资源过期时间;
    • HTTP 1.1中,采用E-Tag(response/request header)和If-None-Match来决定该资源是否过期;

哪怕是协商缓存,一旦命中,这个HTTP请求响应速度也是极快的。

当然,如何配置浏览器缓存,大多是后台资源服务器控制的。比如,通常我们建议将共有图片,第三方JS插件库或者CSS放到CDN(内容发布网络)上,不仅仅因为CDN的分布式特性可以加快资源文件下载速度,而且,一般CDN服务器都做了缓存配置,可以充分浏览器缓存。

小贴士:

如果用JQuery动态加载脚本文件,或者请求其他类型资源文件,可以设置```cache```属性。
cache为true时,开启缓存;反之,JQuery自动在请求上加后缀,强行从服务器重新下载资源文件。
代码如下:
$.ajaxSetup({
  cache: true //开启缓存
});

小结

网站性能优化是一个长期过程,一点点做起,最终总会见到成效。系列文章还将继续......

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

推荐阅读更多精彩内容

  • 网站优化离不开前后端的互相协作,但是对于前端工程师来说,在保证后端技术方案不变时,能不能只利用前端技术来优化网站呢...
    留七七阅读 6,317评论 0 31
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,748评论 1 92
  • Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列...
    拉风的老衲阅读 1,844评论 0 1
  • 围绕前端的性能多如牛毛,涉及到方方面面,以我我们将围绕PC浏览器和移动端浏览器的优化策略进行罗列注意,是罗列不是展...
    流动码文阅读 676评论 0 0
  • 今天吃的早,晚上也凉快了,出去散步,沿着烏丸通り走了来回。路过了,体育用品店,看着橱窗里的人形さん、想起一起去健身...
    WoodSage阅读 70评论 0 1