性能提升的14条规则(九)

规则9——减少DNS查找

Internet是通过IP地址来查找服务器的。由于IP地址很难记忆,通常使用包含主机名的URLLAI 来取代它,但当浏览器发送其请求时,IP地址仍然是必需的。这就是Domain Name System(DNS)所处的角色。DNS将主机名映射到IP地址上,就像电话本将人名映射到他们的电话号码一样。当你在浏览器中键入www.yahoo.com时,连接到浏览器的DNS解析器会返回服务器的IP地址。

这个解释抢到了DNS——URL和实际宿主它们的服务器之间的一个间接层——的另外一项优点。如果一个服务器被另外一个具有不同IP地址的服务器取代了,DNS允许用户使用同样的主机名来连接到新的服务器。或者,比如在www.yahoo.com的例子中,可以将多个IP地址关联到一个主机名,为网站提供高冗余度。

然而,DNS也是开销。通常浏览器查找一个给定的主机名的IP地址要花费20~120毫秒。在DNS查找完成之前,浏览器不能从主机名那里下载到任何东西。响应时间依赖于DNS解析器(通常由你的ISP提供)、它所承担的请求压力、你与它之间的距离和你的宽带速度。在从浏览器的角度回顾完DNS的工作后,我将介绍如何减少页面花在DNS查找上的时间。

DNS缓存和TTL

DNS查找可以被缓存起来以提高性能。这种缓存可以发生在由你的ISP或局域网中的一台特殊的缓存服务器上,但我们这里要探索的是发生在独立用户的计算机上的DNS缓存。如果,在用户请求了一个主机名后,DNS信息会留在操作系统的DNS缓存中(Microsoft Windows 上的“DNS Client服务”),之后对于该主机名的请求将无需进行过多的DNS查找,至少短时间内不需要。

够简单把?——很多浏览器拥有其自己的缓存,和操作系统的缓存相分离。只要浏览器在其缓存中保留了DNS记录,它就不会麻烦操作系统来请求这个记录。只要当浏览器缓存丢弃了记录时,它才会向操作系统询问地址——然后操作系统或者通过其缓存来相应这个请求,或者将请求发送给一台远程服务器,这时就会发生潜在的速度降低。

使事情更复杂的是,设计者知道IP地址会变化以及缓存会消耗内存。因此,应该周期性地清楚缓存中的DNS记录,并通过大量不同的配置设置检车清楚的频率有多高。

影响DNS缓存的因素

首先,服务器可以表明记录可以被缓存毒酒。查找返回的DNS记录包含了一个存活时间(Time-to-live,TTL)值。该值告诉客户端可以对该记录缓存多久。

尽管操作系统缓存会考虑TTL值,但浏览器通常忽略该值,并设置它自己的时间限制。只要浏览器和Web服务器愉快地通信着,并保持着TCP连接打开的状态,就没有理由进行DNS查找。

浏览器对缓存的DNS记录的数量也有限制,而不管缓存记录的时间。如果用户在短时间内访问了很多具有不同域名的网站,较早的DNS记录,操作系统可能依然保持着该记录,这能扭转一下局面,因为无需通过网络发送查询,从而避免了明显的延迟。

posted @ 2015-06-23 00:11  范丁文  阅读(130)  评论(0编辑  收藏  举报