提升网页的打开速度,通常地咱们会选择使用CDN,利用“就近原则”让用户在最短的时间内获取到服务器资源,实际应用当中采用CDN的方式提升网站访问速度的效果也是最明显的。这也就是为何国外的空间打开速度远不及国内的主机的访问速度的缘由了。php
咱们知道在用户访问网站时先得通过域名DNS解析这一过程,可能不少人对于DNS解析时间日常并无太在乎。性能稳定、响应时间快的DNS域名 解析服务与不稳定、响应过慢的DNS的域名解析时间可能相差1秒,而对于网站存在过多的域名解析请求,这个时间积累起来就很是地多了。css
本篇文章就来分享一下经过优化网站DNS域名解析,减小域名DNS解析时间,从而让网站在原来的访问速度的前提下更加完美。html
减小域名DNS解析时间将网页加载速度提高到新层次-DNS缓存/预加载/多域名web
1、域名DNS解析原理和过程浏览器
一、DNS是怎么来的?DNS 是域名系统 (Domain Name System) 的缩写。在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工做 称为域名解析,域名解析须要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。缓存
二、DNS解析的基本过程一:查找本地域名DNS缓存。当用户经过浏览器访问某域名时,浏览器首先会在本身的缓存中查找是否有该域名对应的IP地址,例如计算机系统Hosts文件域名对应IP、路由器缓存、ISP(互联网服务提供商)DNS缓存。服务器
三、DNS解析的基本过程二:经过上面的DNS查询依然没有找到想你的域名对应的IP地址,那么就要进入根服务器进行查询。全球共有13台根逻 辑域名服务器。这13台逻辑根域名服务器中名字分别为“A”至“M”,真实的根服务器在2014年1月25日的数据为386台,分布于全球各大洲。网络
四、在根域名服务器中虽然没有每一个域名的具体信息,但储存了负责每一个域(如COM、NET、ORG等)的解析的域名服务器的地址信息。根域名服 务器会将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器,这样你的域名查询请求会进入到相应的顶级域名服务器。性能
五、DNS解析的基本过程三:顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名(不带任何前缀的域名,如 freehao123.com)服务器的IP地址告诉本地DNS服务器。若是仍是没有找到,则进入到下一级域名服务器进行查找。如此重复,直到找到正确的 结果为止。fetch
六、查找到正确的域名对应IP地址后,本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端经过这个IP 地址与web服务器创建连接。因而你的浏览器就正常访问网站了。下图是对Google.com为例,解释用户在访问谷歌时DNS解析的全过程。
2、浏览器加载网页的基本过程
一、从浏览器地址栏的请求连接开始,浏览器经过DNS解析查到域名映射的IP地址,成功以后浏览器端向此IP地址取得链接,成功链接以后,浏览器端将请求头信息经过HTTP协议向此IP地址所在服务器发起请求,服务器接受到请求以后等待处理。
二、览器加载显示html的顺序是:从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。若是遇到语义解释性的标签嵌入文件(JS脚本,CSS 下载过程会启用单独链接进行下载,而且在下载后进行解析,解析过程当中,中止页面全部往下元素的下载。
三、什么缘由会致使网页加载过慢?浏览器能够在下载CSS资源的同时,并行解析HTML文件,可是,一旦发现有脚本文件的引用,则必须等待脚本文件完成下载而且执行后才能继续解析。内容下载时间主要取决于用户带宽、服务器带宽、文件大小、文件数量等。
3、合理利用DNS TTL值 增长域名的缓存命中率
一、DNS 服务器采用递归或迭代来处理客户端查询时,它们将发现并得到大量有关 DNS 命名空间的重要信息。而后这些信息由服务器缓存。缓存为 DNS 解析流行名称的后续查询提供了加速性能的方法,同时大大减小了网络上与 DNS 相关的查询通讯量。
二、TTL(Time-To-Live)即一条域名解析记录在DNS服务器上缓存时间。当信息缓存时,生存时间 (TTL) 值适用于全部缓存的 RR。只要缓存 RR 的 TTL 没有到期,DNS 服务器就可继续缓存并再次使用 RR 来应答与这些 RR 相匹配的客户端提出的查询。
三、适当地增大TTL值可让DNS Server缓存该域名更长时间,增长缓存的命中率。TTL通常默认为一小时,能够根据实际状况设为一天甚至一周以上。固然,若是你域名的IP常常变化, 则TTL不该过大,不然各地的DNS Server会暂时没法得到新的正确的IP地址。
4、合理使用DNS-prefetch让DNS预读取
一、从上面浏览器加载网页的过程能够看出,网页的请求是能够多任务同时进行的,对于网页有多个DNS请求的状况,可让浏览器在后台先把要使用的DNS请求默默地完成,这样当用户在打开新的网页时,就能够节省DNS查询的时间了。
二、控制浏览器的DNS预读取就是DNS-prefetch标签了,DNS Prefetch应该尽可能的放在网页的前面,格式相似是:
不少网站都使用使用百度广告联盟代码,使用这个就能够预读取DNS了。
三、默认状况下浏览器会有隐式的DNS Prefetch,即会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,而且缓存结果,咱们能够经过下面的标签禁止隐式的DNS Prefetch:
四、须要注意的就是,DNS Prefetch只须要在用户在第一次打开网站时使用便可,没有必要每一个页面都使用DNS Prefetch,不然就是重复DNS读取了,反而还无形中增长了DNS查询的次数,效果拔苗助长。
5、DNS域名解析拆分为多个域名增长并行下载量
一、通常来讲网页的内容加载时会发生多个域名请求服务,若是你的网站JS、CSS、图片等很是多的话,建议将这些文件分别放在不一样的域名上,这样浏览器在打开某一个页面时就能够同时向这些域名发送DNS解析请求了,能在必定程度上减小DNS时间。
二、网页的内容越多,分析的域名应该尽可能多一些。例如html、htm,js、css,jpg、png、gif,php、asp均可以放在不一样 的域名上。在实际应用上,使用全站CDN或者是静态文件CDN就能够实现上述效果,而且结合css sprite一块儿来使用的。
三、css sprite的做用偏偏相反,它不是增长域名请求,而减小域名DNS请求,主要是用在图片上。它容许你将一个页面涉及到的全部零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像之前那样一幅一幅地慢慢显示出来了。
6、加快域名DNS解析速度方法小结
一、本文介绍的用DNS缓存、DNS预读取、拆分域名来减小域名DNS解析的时间的方法,对于通常的网站的加速效果可能并不明显,可是对于一些 天天DNS请求达到上百万级以上的网站,DNS加速的效果就显而易见了。另外,若是发现本身的网站响应速度过慢,不妨好好检查一下网页的DNS用时。
二、除了从网站自己的DNS解析来加快访问速度外,咱们日常在选择DNS服务时尽可能使用那些稳定可靠的DNS服务,这样的DNS服务响应速度和 缓存率都是很是不错的。假如本身的网站分拆了多个二级域名,不妨好好用用CNAME,设置好TTL时间,保证网站的第一次解析,能够直接从运营商的DNS 缓存中拿到。