减少HTTP请求次数
为什么:
性能黄金法则:只有10%-20%的最终用户相应时间花在接收请求的HTML文档上,剩下的80%-90%时间花在HTML文档所引用的所有组件(图片,script,css,flash等等)进行的http请求上。
如何改善呢?改善相应时间最简单的途径就是减少组价的数量,并由此减少HTTP请求的数量。
HTTP连接产生的开销:
几个步骤
域名解析—TCP连接—发送请求—等待—下载资源—解析时间
中间有个等待和下载资源,这些都比较消耗时间的,所以我们为了解决http产生的开销,尽量让他稍有http连接。
1. 问:DNS解析有DNS缓存,我们已经把解析过的已经缓存过了?还浪费啥时间
答:虽然DNS缓存有,但是我们查找DNS缓存也需要一定的时间,多个缓存就要查找多次,有可能缓存会被清除
2. 问:HTTP1.1默认是Keep-Alive方式来进行操作的,我们不会花费TCP握手的时间了
答:我们HTTP本身是串行请求,100个请求必须一次逐个发送,前面的请求玩了才能完成下一个请求,造成相应时间的影响
减少HTTP请求的方式:
1 图片地图
其允许你在一个图片上关联多个URL。目标URL的选择取决于用户单击了图片上的那个位置。
我们可以通过使用多个分开的图片,然后每个图片都对应一个超链接,当然这也会产生很多HTTP请求,我们目标是减少HTTP请求。
将多个图片合并成一个图片,然后以位置信息定位超链接
把HTTP信息减少成为一个,可以保证设计的完整性和功能的齐全性
使用<map><area></area></map>标签
用 usemap=”#map1” border = 0在image标签里
<map name=”map1”>
在map里声明area <area shape =”rect” cords=”0.0.31.31” href=”” title=”home”>
Rect 矩形 0.0是左上角的左边,31.31是右下角的坐标
CSS Sprites
CSS精灵,通过使用合并图片,通过制定css的Backgroud-image和background-position来显示元素。
Backgroud-positon属性:
x和y可以写负值和正值,我们可以想象图片的左上角为(0.0),向右为负数X轴,向下负数y轴
比如span{
Background-position:0,0
Margin-right:4px;
Margin-left:4px;
}
.gift{
Background-position:-32px,0
Margin-right:4px;
}
对性能来说,图片地图和CSS精灵相应时间基本相同,但比使用各自图片的方式要快50%以上,通常CSS精灵比较简单,所以用的比较多
合并脚本和样式表
使用外部的JS和CSS文件应用的方式,因为这要比直接写在页面中性能更好
但增加了HTTP请求,不过可以合并,独立的JS比用多个JS文件的页面载入块38%
把多个脚本合并成一个脚本,把多个样式表合并成一个样式表
图片是用Base64编码减少页面请求数
页面加载很多图片,对这些图片有些可以合并,有些不太合适合并,我们可以把图片做Base64编码,将图片直接嵌入网页中,而不是从外部载入(直接以数据显示了)
比如<img src=”data:image/gif;base64,/9j/4AAQSkZJ……”> 这个base64可以通过PHP帮我们生成。这样可以减少HTTP请求,页面变大一些。