87467304 2013-04-24
最近在优化web页面,自然少不了与网络传输,请求相关的一些考虑,在做了gzip压缩,设置JS/css/image的expired或max-age时间后,用测试工具做了分析,效果确实好多了,不过工具也给出了一些建议,比如CDN,httpkeep-alive,CDN是做不了了。
查阅了一些有关keep-alive的资料,Keep-Alive在http1.0版本默认不支持,需要显示的设置头信息Connection:Keep-Alive,在http1.1版本中,请求端默认开启。http本身是基于TCP的无状态的连接,每次交互都是请求->响应->关闭连接,若打开了此功能,则在第一次请求时打开,同时保持为一个长连接,后续的请求过来时,就不用再打开,关闭消耗资源了。个人觉得这是一把双刃剑,看你如何去均衡了。如果长时间打开,它会一直占用这个连接,在大并发量时,显然不合适,最好是设置一个超时时间,如下为JAVA示例。
1.服务端必须显示的告知客户端启用Keep-Alive
response.addHeader("Connection","keep-alive");
2.设置超时时间,为10s后关闭连接,同时在这段时间内最大支持50个请求.
response.addHeader("keep-alive","timeout=10,max=50");
同时有不错的工具,可以免费测试:
http://www.webpagetest.org/
https://addons.mozilla.org/en-US/firefox/addon/yslow/
https://developers.google.com/speed/pagespeed/?hl=zh-CN