DNS預解析的目的
在網頁體驗中我們常會遇到這種情況,即在調用百度聯盟、谷歌聯盟以及當前網頁所在域名外的域名文件時會遇到請求延時非常嚴重的情況。那么有沒有方法去解決這種請求嚴重延時的現象呢?
DNS預解析
一般來說,在前端優化中與 DNS 有關的有兩點: 1)是減少DNS的請求次數,2)是進行DNS預獲取——DNS Prefetch 。
DNS與域名解析
DNS(Domain Name System),即域名系統,是域名和IP地址相互映射的一個分布式數據庫。
瀏覽器對網站第一次的域名DNS解析查找流程依次為:
瀏覽器緩存 - 系統緩存 - 路由器緩存 - ISP DNS緩存 - 遞歸搜索
DNS預解析
DNS 作為互聯網的基礎協議,其解析的速度似乎很容易被網站優化人員忽視。現在大多數新瀏覽器已經針對DNS解析進行了優化,典型的一次DNS解析需要耗費** 20-120 毫秒**,減少DNS解析時間和次數是個很好的優化方式。
DNS Prefetching 是讓具有此屬性的域名不需要用戶點擊鏈接就在后台解析,而域名解析和內容載入是串行的網絡操作,所以這個方式能減少用戶的等待時間,提升用戶體驗 。
默認情況下瀏覽器會對頁面中和當前域名(正在瀏覽網頁的域名)不在同一個域的域名進行預獲取,並且緩存結果,這就是隱式的 DNS Prefetch。如果想對頁面中沒有出現的域進行預獲取,那么就要使用顯示 DNS Prefetch 了。
DNS預解析具體用法
//用meta信息來告知瀏覽器, 當前頁面要做DNS預解析
<meta http-equiv="x-dns-prefetch-control" content="on">
在頁面header中使用link標簽來強制對DNS預解析:
<link rel="dns-prefetch" href="//www.zhix.net">
注意:dns-prefetch需慎用,多頁面重復DNS預解析會增加重復DNS查詢次數,因為有開發者指出 禁用DNS 預讀取能節省每月100億的DNS查詢 。
//如果需要禁止隱式的 DNS Prefetch
<meta http-equiv="x-dns-prefetch-control" content="off">