DNS预先获取(dns-prefetch)
闲来无事翻看taobao源码时看到了以下内容:
<meta charset=”gbk”>
<link rel=”dns-prefetch” href=”//g.tbcdn.cn”>
<link rel=”dns-prefetch” href=”//gtms01.alicdn.com”>
<link rel=”dns-prefetch” href=”//img01.taobaocdn.com”>
<link rel=”dns-prefetch” href=”//img02.taobaocdn.com”>
<link rel=”dns-prefetch” href=”//img03.taobaocdn.com”>
<link rel=”dns-prefetch” href=”//img04.taobaocdn.com”>
<link rel=”dns-prefetch” href=”//log.mmstat.com”>
<link rel=”dns-prefetch” href=”//p.tanx.com”>
<link rel=”dns-prefetch” href=”//i.mmcdn.cn”>
<link rel=”dns-prefetch” href=”//delta.taobao.com”>
查阅了相关资料,知道DNS Prefetch也就是DNS预先获取,也是前段优化的一部分。在前段优化中关于DNS的有两点:一是减少DNS的请求次数,第二个就是进行DNS预先获取。
DNS Prefetch 已经被下面的浏览器支持
- Firefox: 3.5+
- Chrome: Supported
- Safari 5+
- Opera: Unknown
- IE: 9 (called “Pre-resolution” on blogs.msdn.com)
默认情况下浏览器会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,这就是隐式的DNS Prefetch。如果想对页面中没有出现的域进行预获取,那么就要使用显示的DNS Prefetch了,也就是使用link标签:
<link rel=”dns-prefetch” href=”http://api.twitter.com”/>
DNS Prefetch应该尽量的放在网页的前面,推荐放在<meta charset=”/>后面。
PS:可以通过下面的标签禁止隐式的DNS Prefetch。
<meta http-equiv=”x-dns-prefetch-control” content=”off”>
其实DNS预先获取只是HTML5其中的一个特性,其他特性还有:
特性一:正则表达式
相信大家都会非常喜欢这个特性,无须服务器端的检测,使用浏览器的本地功能就可以帮助你判断电子邮件的格式,URL,或者是电话格式,防止用户输入错误的信息,通过使用HTML5的pattern属性,我们可以很方便的整合这个功能,代码如下:
<input type=”email” pattern=”[^ @]*@[^ @]*” value=””>
特性二:数据列表元素
在没有HTML5的日子里,我们会选择使用一些JS或者知名的jQuery UI来实现自动补齐的功能,而在HTML5中,我们可以直接使用datalist元素,如下:
<form action=”/server” method=”post”>
<input list=”jslib” name=”jslib” >
<datalist id=”jslib”>
<option value=”jQuery”>
<option value=”Dojo”>
<option value=”Prototype”>
<option value=”Augular”>
</datalist>
<input type=”submit” value=”完成” />
</form>
特性三:下载属性
HTML5的下载属性可以允许开发者强制下载一个页面,而非加载那个页面,这样的话,你不需要实现服务器端的一些功能来达到同样的效果,是不是非常贴心?
<a href=”download_pdf.php” download=”somefile.pdf”>下载PDF文件</a>
特性四:链接网页的预先加载处理
要知道链接能够在也页面中帮助用户导航,但是页面加载的速度快慢决定了用户体验的好与坏,使用如下HTML5的prefetch属性可以帮助你针对指定的地址预加载页面或者页面中的特定资源,这样用户点击的时候,会发现页面加载速度提高了。
<link rel=”prefetch” href=”http://www.gbtags.com/gb/users.htm” />
<link rel=”prefetch” href=”http://www.gbtags.com/gb/networks/themes/img/logo_small.jpg” />
或者可以使用prerender属性,这个属性能够帮助你提前加载整个页面,如下:
<link rel=”prerender” href=”http://www.gbtags.com/gb/search.htm” />