金氧

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 缓存可以有效降低前端服务器负载。将静态/动态资源分离能进一步优化服务整体性能,但需要改进前端服务器(负载均衡代理服务器)代理模式。

« Go Web 开发(一) JPA 缓存与应用集群 »