# 网站性能优化

在提到网站性能优化不得不说到一个经典问题“从浏览器输入 URL 到浏览器完成页面的渲染,这个过程发生了什么?”

  1. 地址栏输入 url,浏览器把 domain 发送到 dns 服务器解析,从而获取到 ip 地址。
  2. 协议带着 ip 地址以及参数等数据发送到网路种,依次经过局域网、交换机、路由器以及主干网络等到达服务器。
  3. 在服务端中会有个 MVC 的架构,先在 controller 中有个逻辑处理以及请求的分发,再到 model,model 层处理数据的交互,会读取 redis 或者 db 等的数据,得到对应结果由 model 传给 view 层。
  4. 最后通过网络再把 view 的结果传回到浏览器,浏览器根据请求回来的 html、css 等生成对应的 dom 树和 cssdom 树,结合 dom 和 cssdom 最终渲染成一个页面。

了解这个过程后,我们也就能知道可以优化的点有哪几个方面?

# 域名解析

  1. 浏览器的 DNS 缓存(缓存时间 1 分钟左右,时间太长会影响及时获取到最新 ip 地址)

    描述

    浏览器有一套自己的 ip 和域名的对应表,此表找不到则到下一步。

  2. 操作系统中 DNS 的缓存

    描述

    1. 操作系统将域名发送至本地域名服务器(LDNS),LDNS 查询自己的 DNS 缓存,查找成功则返回结果,查找失败则发起一个迭代 DNS 解析请求。
    2. LDNS 向根域名(Root Name Server,如:com、cn 等)发送请求,根域名返回顶级域名服务器的地址。
    3. LDNS 向顶级域名服务器发送请求,返回 domain 的域名服务器地址。
    4. LDNS 向域名服务器发送请求,获取到 ip 地址。
    5. LDNS 将 ip 地址返回给操作系统,也会缓存此 ip 地址,操作系统获取到 ip 地址后缓存起来并返回给浏览器。
  3. host 文件

优化点:DNS PreFetch(预获取) 减少 DNS 的请求次数。

# 网络请求的过程(涉及到带宽、缓存、CDN 等)

  1. 减少 http 请求
  2. 减少重绘和回流
  3. 缓存
  • 强缓存(cache-control)
  • 协商缓存

# 浏览器的渲染