Web 应用性能——HTTP 请求数
摘要
从页面 HTTP 请求数以及 HTTP 缓存两方面来分析 Web 应用性能,并给出相应优化建议。
HTTP 请求数
浏览器在请求服务器后如果返回 HTML,则在浏览器端可能会涉及到如下一些并发 HTTP 请求:
- CSS/JS/IMG(via GET),请求数记作 S
- 脚本函数请求(via AJAX GET/POST/etc.),请求数记作 D
- IFrame(via GET, S’& D’),请求数记作 I
由此可得出一个用户在无浏览器缓存时访问某页面的 HTTP 并发数:
C = S + D + I
优化策略
为了有效降低并发 HTTP 请求数 C,必须降低 S、D 与 I。可以考虑从以下几个方面进行优化:
- CSS Sprite,图片压缩(降低 S)
- CSS/JS合并,压缩(降低 S)
- 离线存储(降低 D)
- 避免使用IFrame,AJAX 加载(降低 I,降低 S、D)
HTTP 缓存
HTTP 缓存的目的在于减少服务器处理损耗,降低带宽占用,从而提高浏览器端用户体验,提升服务器性能。
在 HTTP/1.1 协议中,最常用的缓存控制方法是通过设置 Cache-Control、Expires、Last-Modified、ETag 头作为响应内容缓存控制策略。
其基本原理是服务器在处理请求时通过非常高效、低耗的计算(时间,HASH)可以得知请求的内容是否发生变化,若未变化则告知浏览器 304(Not Modified),浏览器从本地缓存取资源;否则返回请求资源。
优化策略
响应头 Cache-Control、Expires、Last-Modified、ETag 必须进行有效设置:
- CSS/JS/IMG/etc.
将这些静态资源设置缓存控制,例如至少为一天。 - 静态/动态资源分离
将静态资源部署到独立的 HTTP 服务器中,这样可以有效缓解应用服务器压力。
结论
通过降低页面 HTTP 请求数,优化 HTTP 缓存可以有效降低前端服务器负载。将静态/动态资源分离能进一步优化服务整体性能,但需要改进前端服务器(负载均衡代理服务器)代理模式。