WEB性能优化web
写在前面跨域
Web性能优化是一个近年来新兴的一个产业,该发展迅速主要取决于企业愈来愈重视用户体验。用户也愈来愈重视速度方面的体验,不少企业证明网站越快,用户的黏性,忠诚度,转化率才会愈来愈高。缓存
对web性能的优化主要就是优化其速度,而要优化速度就要研究影响速度提高的各类因素。对于速度来说,对其有影响的无外乎带宽与延迟。性能优化
延迟 :分组从信息源发送到目的地所需的时间。服务器
带宽 :逻辑或物理通讯路径最大的吞吐量。cookie
页面加载时间与带宽和延迟的关系网络
曾有人对互联网上最热门的一些站点的页面加载时间和带宽与延迟作过一些测试,结果以下图:ide
页面加载时间与带宽和延迟的关系
性能
在第一个测试中,链接的延迟时间固定而带宽递增,从 1 Mbit/s 依次递增至 10Mbit/s。注意一开始,从 1 Mbit/s 升级到 2 Mbit/s,页面加载时间几乎减小了一半,这也是咱们但愿看到的结果。但是,在此以后,带宽递增,加载时间减小得愈来愈不明显。而当带宽超过 5 Mbit/s 时,加载时间的减小比例只有几个百分点,从 5Mbit/s 升级到 10 Mbit/s,页面加载时间仅下降了 5%。测试
由此可知,靠提升带宽不会给用户浏览网页带来多大的性能提高。或许用户下载大文件、看视频的速度很快,但加载包含这些文件的页面的时间不会明显缩短。换句话说,增长带宽没有那么重要。然而,在延迟以 20 ms 递减的试验中,页面加载时间呈线性减小趋势。
当咱们的带宽提升已不能快速提高站点性能时,就应该围绕延迟这一因素来对其进行优化。咱们没法掌握用户与服务器端的网络情况,和用户手持怎样高级或者怎样烂的一个终端设备来访问咱们的站点,可是除此以外的一切都应该是咱们所可以操控的。OSI协议模型的有七层结构,每一层都会有一些没必要要的延迟产生,让咱们对这七层的每一层都作到滴水不漏的优化显然是不可能的。可是努力追求去作到对每一层的优化显然是值得的。
对于通讯信道来说,其物理属性显然是一个比较硬性的限制,在没法打破光速这个‘天道极限速度’时,只有缩短其数据传输的距离了。
既然不能让数据跑的更快,那么只能去优化其传输层与应用层。咱们能够去消除没必要要的往返,请求。缩短传输距离—把数据放置在最后一千米。
对性能优化的建议
说到底,不管什么网络或者网络协议版本,全部应用都应该致力于消除或者减小没必要要的网络延迟,将其须要传输的数据压缩至最少。这两条标准才是最为经典的性能优化建议。
对其优化前人已总结有十条优化准则:
1 减小DNS查找
每一次主机名解析都须要一次网络往返,从而增长请求的延迟时间,同时还会阻塞后续请求。
2 重用TCP链接
尽量使用持久链接,以消除 TCP 握手和慢启动延迟;
3 减小HTTP重定向
HTTP 重定向极费时间,特别是不一样域名之间的重定向,更加费时;这里面既有额外的 DNS 查询、TCP 握手,还有其余延迟。最佳的重定向次数为零。
4 使用 CDN(内容分发网络)
把数据放到离用户地理位置更近的地方,能够显著减小每次 TCP 链接的网络延迟,增大吞吐量。这一条既适用于静态内容,也适用于动态内容;
5 去掉没必要要的资源
任何请求都不如没有请求快。说到这,全部建议都无需解释。延迟是瓶颈,最快的速度莫过于什么也不传输。然而,HTTP 也提供了不少额外的机制,好比缓存和压缩,还有与其版本对应的一些性能技巧。
6 在客户端缓存资源
应该缓存应用资源,从而避免每次请求都发送相同的内容。
7 传输压缩过的内容
传输前应该压缩应用资源,把要传输的字节减至最少:确保每种要传输的资源采用最好的压缩手段。
8 消除没必要要的请求开销
减小请求的 HTTP 首部数据(好比 HTTP cookie),节省的时间至关于几回往返的延迟时间。
9 并行处理请求和响应
请求和响应的排队都会致使延迟,不管是客户端仍是服务器端。这一点常常被忽视,但却会无谓地致使很长延迟。
10 针对协议版本采起优化措施
HTTP 1.x 支持有限的并行机制,要求打包资源、跨域分散资源,等等。相对而言,HTTP 2.0 只要创建一个链接就能实现最优性能,同时无需针对 HTTP 1.x 的那些优化方法。