Web 前端性能优化

浏览器访问优化

1. 减少 http 请求

HTTP 协议是无状态的应用层协议,意味着每次 HTTP 请求都需要建立通信链路、进行数据传输,而在服务器端,每个 HTTP 都需要启动独立的线程去处理。这些通信和服务的开销都很昂贵,减少 HTTP 请求的数目可有效提高访问性能。

减少 HTTP 请求的主要手段是合并 CSS合并 JavaScript合并图片

  • 将浏览器一次访问需要的 JavaScript、CSS 合并成一个文件,这样浏览器就只需要一次请求。

  • 图片也可以合并,多张图片合并成一张,如果每张图片都有不同的超链接,可通过 CSS 偏移响应鼠标点击操作,构造不同的 URL。

2. 使用浏览器缓存

对一个网站而言,CSS、JavaScript、Logo、图标这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次 HTTP 请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。通过设置 HTTP 头中 Cache-Control 和 Expires 的属性,可设定浏览器缓存,缓存时间可以是数天,甚至是几个月。

注意

3. 启用压缩

在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量。

4. CSS 放在页面最上面、JavaScript 放在页面最下面

浏览器会在下载完全部 CSS 之后才对整个页面进行渲染,因此最好的做法是将 CSS 放在页面最上面,让浏览器尽快下载 CSS。

JavaScript 则相反,浏览器在加载 JavaScript 后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此 JavaScript 最好放在页面最下面。

  • Cookie 包含在每次请求和响应中,太大的 Cookie 会严重影响数据传输,因此哪些数据需要写入 Cookie 需要慎重考虑,尽量减少 Cookie 中传输的数据量

  • 对于某些静态资源的访问,如 CSS、Script 等,发送 Cookie 没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送 Cookie,减少 Cookie 传输的次数

CDN 加速

CDN(Content Distribute Network,内容分发网络)的本质仍然是一个缓存,通过将数据缓存在离用户最近的地方,使用户以最快速度获取数据。

由于 CDN 部署在网络运营商的机房,这些运营商又是终端用户的网络服务提供商,因此用户请求路由的第一跳就到达了 CDN 服务器,当 CDN 中存在浏览器请求的资源时,从 CDN 直接返回给浏览器,最短路径返回响应,加快用户访问速度,减少数据中心负载压力。

CDN 能够缓存的一般是静态资源,如图片、文件、CSS、Script 脚本、静态网页等,但是这些文件访问频度很高,将其缓存在 CDN 可极大改善网页的打开速度。

反向代理

和传统代理服务器可以保护浏览器安全一样,反向代理服务器也具有保护网站安全的作用,来自互联网的访问请求必须经过代理服务器,相当于在 Web 服务器和可能的网络攻击之间建立了一个屏障。

除了安全功能,代理服务器也可以通过配置缓存功能加速 Web 请求。当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速 Web 请求的响应速度,减轻 Web 服务器的负载压力。

此外,反向代理也可以实现负载均衡的功能,而通过负载均衡构建的应用集群可以提高系统总体处理能力,进而改善网站高并发情况下的性能。