Web 前端性能优化
浏览器访问优化
1. 减少 http 请求
HTTP 协议是无状态的应用层协议,意味着每次 HTTP 请求都需要建立通信链路、进行数据传输,而在服务器端,每个 HTTP 都需要启动独立的线程去处理。这些通信和服务的开销都很昂贵,减少 HTTP 请求的数目可有效提高访问性能。
减少 HTTP 请求的主要手段是合并 CSS、合并 JavaScript、合并图片。
将浏览器一次访问需要的 JavaScript、CSS 合并成一个文件,这样浏览器就只需要一次请求。
图片也可以合并,多张图片合并成一张,如果每张图片都有不同的超链接,可通过 CSS 偏移响应鼠标点击操作,构造不同的 URL。
2. 使用浏览器缓存
对一个网站而言,CSS、JavaScript、Logo、图标这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次 HTTP 请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。通过设置 HTTP 头中 Cache-Control 和 Expires 的属性,可设定浏览器缓存,缓存时间可以是数天,甚至是几个月。
注意
在某些时候,静态资源文件变化需要及时应用到客户端浏览器,这种情况,可通过改变文件名实现。
使用浏览器缓存策略的网站在更新静态资源时,不应采用批量更新的方法,比如当需要更新 10 个图标文件时,不宜把 10 个文件一次全部更新,而是应一个文件一个文件逐步更新,并有一定的间隔时间,以免用户浏览器突然大量缓存失效集中更新缓存,造成服务器负载骤增、网络堵塞的情况。
3. 启用压缩
在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量。
4. CSS 放在页面最上面、JavaScript 放在页面最下面
浏览器会在下载完全部 CSS 之后才对整个页面进行渲染,因此最好的做法是将 CSS 放在页面最上面,让浏览器尽快下载 CSS。
JavaScript 则相反,浏览器在加载 JavaScript 后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此 JavaScript 最好放在页面最下面。
5. 减少 Cookie 传输
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 服务器的负载压力。
此外,反向代理也可以实现负载均衡的功能,而通过负载均衡构建的应用集群可以提高系统总体处理能力,进而改善网站高并发情况下的性能。