# 网站性能优化
在提到网站性能优化不得不说到一个经典问题“从浏览器输入 URL 到浏览器完成页面的渲染,这个过程发生了什么?”
- 地址栏输入 url,浏览器把 domain 发送到 dns 服务器解析,从而获取到 ip 地址。
- 协议带着 ip 地址以及参数等数据发送到网路种,依次经过局域网、交换机、路由器以及主干网络等到达服务器。
- 在服务端中会有个 MVC 的架构,先在 controller 中有个逻辑处理以及请求的分发,再到 model,model 层处理数据的交互,会读取 redis 或者 db 等的数据,得到对应结果由 model 传给 view 层。
- 最后通过网络再把 view 的结果传回到浏览器,浏览器根据请求回来的 html、css 等生成对应的 dom 树和 cssdom 树,结合 dom 和 cssdom 最终渲染成一个页面。
了解这个过程后,我们也就能知道可以优化的点有哪几个方面?
# 域名解析
- 浏览器的 DNS 缓存(缓存时间 1 分钟左右,时间太长会影响及时获取到最新 ip 地址)
描述
浏览器有一套自己的 ip 和域名的对应表,此表找不到则到下一步。
- 操作系统中 DNS 的缓存
描述
- 操作系统将域名发送至本地域名服务器(LDNS),LDNS 查询自己的 DNS 缓存,查找成功则返回结果,查找失败则发起一个迭代 DNS 解析请求。
- LDNS 向根域名(Root Name Server,如:com、cn 等)发送请求,根域名返回顶级域名服务器的地址。
- LDNS 向顶级域名服务器发送请求,返回 domain 的域名服务器地址。
- LDNS 向域名服务器发送请求,获取到 ip 地址。
- LDNS 将 ip 地址返回给操作系统,也会缓存此 ip 地址,操作系统获取到 ip 地址后缓存起来并返回给浏览器。
- host 文件
优化点:DNS PreFetch(预获取) 减少 DNS 的请求次数。
# 网络请求的过程(涉及到带宽、缓存、CDN 等)
- 减少 http 请求
- 减少重绘和回流
- 缓存
- 强缓存(cache-control)
- 协商缓存