缓存梗概
缓存技术几乎存在于网络技术发展的各个角落,从数据库到服务器,从服务器到网络,再从网络到客户端,缓存随处可见。跟前端有关的缓存技术主要有:DNS 缓存,HTTP 缓存,浏览器缓存,HTML5 缓存(/)和 中的 cache api。
DNS 缓存
当用户在浏览器中输入网址的地址后,浏览器要做的第一件事就是解析 DNS:
(1) 浏览器检查缓存中是否有域名对应的 IP,如果有就结束 DNS 解析过程。浏览器中的 DNS 缓存有时间和大小双重限制,时间一般为几分钟到几个小时不等。DNS 缓存时间过长会导致如果 IP 地址发生变化,无法解析到正确的 IP 地址;时间过短会导致浏览器重复解析域名。
(2) 如果浏览器缓存中没有对应的 IP 地址,浏览器会继续查找操作系统缓存中是否有域名对应的 DNS 解析结果。我们可以通过在操作系统中设置 hosts 文件来设置 IP 与域名的关系。
(3) 如果还没有拿到解析结果,操作系统就会把域名发送给本地区的域名服务器(LDNS),LDNS 通常由互联网服务提供商(ISP)提供,比如电信或者联通。这个域名服务器一般在城市某个角落,并且性能较好,当拿到域名后,首先也是从缓存中查找,看是否有匹配的结果。一般来说,大多数的 DNS 解析到这里就结束了,所以 LDNS/ISP DNS 承担了大部分的域名解析工作。如果缓存中有 IP 地址,就直接返回,并且会被标记为非权威服务器应答。
第三步有一点需要注意的是,如果用户在自己电脑里设置了 DNS,比如 的 8.8.8.8 或者 新出的 1.1.1.1,将不会通过 ISP DNS 服务器解析。
(4) 如果前面三步还没有命中 DNS 缓存,那只能到 Root 域名服务器中请求解析了。根域名服务器拿到请求后,首先判断域名是哪个顶级域名下的,比如 .com, .cn, .org 等,全球一共 13 台顶级域名服务器。根域名服务器返回对应的顶级域名服务器(gTLD )地址。
(5) 本地域名服务器(LDNS)拿到地址后,向 gTLD 发送请求,gTLD 服务器查找并且返回此域名对应的 Name 域名服务器地址。这个 Name 通常就是用户注册的域名服务器,例如用户在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。
这个过程的解析方式为递归搜索。比如:谷歌浏览器清除DNS缓存的方法,本地域名服务器首先向顶级域名服务器(com 域)发送请求,com 域名服务器将域名中的二级域 lz5z 的 IP 地址返回给 LDNS,LDNS 再向二级域名服务器发送请求进行查询,之后不断重复直到 LDNS 得到最终的查询结果。
(6) Name 域名服务器会查询存储的域名和 IP 的映射关系表,在正常情况下都根据域名得到目标 IP 地址谷歌浏览器清除DNS缓存的方法,连同一个 TTL 值返回给 LDNS。LDNS 会缓存这个域名和 IP 的对应关系,缓存时间由 TTL 值控制。LDNS 会把解析结果返回给用户,DNS 解析结束。
清除 DNS 缓存
(1) : ://net-/#dns
(2) 本地 DNS :: /; Linux 和 mac 根据不同的版本有不同的方式
减少 DNS 解析我们能做什么?
(1) 减少 DNS 查询,避免重定向。
(2) DNS 预解析:
1
<meta http-equiv="x-dns-prefetch-control" content="on" />
(3) 域名发散/域名收敛
PC 端因为浏览器有域名并发请求限制( 为 6 个),也就是同一时间,浏览器最多向同一个域名发送 6 个请求,因此 PC 端使用域名发散策略,将 http 静态资源放入多个域名/子域名中,以保证资源更快加载。常见的办法为使用 cdn。
将静态资源放在同一个域名下,减少 DNS 解析的开销。域名收敛是移动互联网时代的产物,在 LDNS 没有缓存的情况下,DNS 解析占据一个请求的大多数时间,因此,采用尽可能少的域名对整个页面加载速度有显著的提高。
评论留言