web性能优化

117 阅读4分钟

web性能优化

要搞清楚性能优化 需要知道从输入网址到展示页面中经历了什么

DNS查询

  1. 首先 要知道输入网址的服务器在哪里 ,通过DNS域名解析,会得到一个IP地址,这个 IP 地址就是服务器所在的机房给它分配的官网 IP。
  2. DNS是电信给你配的服务,每个城市的 DNS 服务,都有一个自己的 DNS 服务器,这服务器会自动分配。有时候这些服务会产生故障,这时你就可以选用一些公共的 DNS,比如 114.114.114.114,在这个网址上,它会告诉你百度对应的 IP 是多少。
  3. DNS优化
    • 可以花钱买更多的DNS服务器
    • 配置 hosts,比如说你想登录 baidu.com 你如果在 hosts 中直接把 IP 配好,那么你就可以跳过 DNS 查询的过程了。

发起http请求/本质上是TCP链接

  1. http/https 的底层协议是 TCP/IP 协议,所以它的本质是一个 TCP 连接,这个是不能优化的,因为你必须要发送http/https 请求。但是发送请求的数量是可以被优化的。
  2. 链接复用 (把多个请求合称为一个),后端设置 keep-alive

网页请求数据库 (SQL优化)

所有的网站资源都有 Waiting(TTFB),这个数据表示的是等后端处理完需要多少时间,图上的资源则是38.56ms。所以,我们只需要根据 Waiting 的时间就可以知道网页展示慢是不是由后端造成的。

image.png

网页返回数据(下载速度增加)

下载速度又大致分为两个部分,分别是服务端下载和用户带宽。我们是不能增加用户带宽的,所以我们只能提高我们的服务器的带宽(花钱)。

压缩gzip

后台开启编码方式gzip (服务器返回请求给用户的时候,不直接返回给用户,而是打包一个压缩包,让用户下载这个压缩包,然后浏览器自动的解压这个压缩包)

优化css

css文件中可能存在重复 | 冲突的渲染

  • 重复的属性尽量合并
  • 重复的选择器尽量合并

先加载css 再加载js

从用户体验出发 先渲染,后互动

懒加载

先加载第一屏,通过下拉或点击加载第二瓶

预加载(浪费带宽)

如果用户点击某个链接,我们能在他点击链接之前就把链接给请求了。比如在某些看书网站,它有下一页或者下一章的链接,它常常是绿色的,你一点击就会迅速打开,这就是预加载。

后端缓存和DNS缓存和http请求缓存

浏览器会自动缓存,浏览器请求 badiu.com IP 了

增加域名

如果你要发送30个请求,怎么发送最快?当然是同时发送30个请求。所以我们可以使用管线化传输(piepelinling)。但是每一个浏览器都会做限制,即每个域名同时最多发送6个(概数)请求。所以30个请求会被分为5批进行串行请求。但分成5次传输耗费的时间还是很长,我们就要进行优化。既然每个域名能发6个,那么我们创建多个域名(cdn),就能减少发送请求的次数了。例如 1个 html 文件 5个 css 文件 24个 js 文件

  • 域名a专门发送 html 请求
  • 域名b专门发送 css 请求
  • 域名c专门发送 js 请求

cookie-free

区分了域名还有另一个好处—就是 cookie-free。一般来说,我们所有的网站上都会种下 cookie,cookie 会随着请求上传。通常来说,一个请求的大小为 1kb 到 3kb。而 cookie 的大小一般有 4kb,所以每一次请求都会上传一个4kb 的 cookie,会大大的增加上传量。增加域名的好处就在于,一般来说,cdn 域名和主域名是完全不相关的,例如淘宝的主域名是 www.taobao.com。而它的其中一个 cdn 域名是 g.alicdn.com。此外 cookie 是跟着域名走的,这样一来除了主域名请求的文件外,所有的文件都无 cookie,即不用上传这4kb的 cookie,这就是 cookie-free。