瀏覽器 DNS緩存 瀏覽器DNS緩存的時間跟DNS伺服器返回的TTL值無關。 註:TTL(Time-To-Live),就是一條功能變數名稱解析記錄在DNS伺服器中的存留時間。 瀏覽器在獲取網站功能變數名稱的實際IP地址後會對其IP進行緩存,減少網路請求的損耗。每種瀏覽器都有一個固定的DNS緩存時間,其中Chrome ...
瀏覽器 DNS緩存
瀏覽器DNS緩存的時間跟DNS伺服器返回的TTL值無關。
註:TTL(Time-To-Live),就是一條功能變數名稱解析記錄在DNS伺服器中的存留時間。
瀏覽器在獲取網站功能變數名稱的實際IP地址後會對其IP進行緩存,減少網路請求的損耗。每種瀏覽器都有一個固定的DNS緩存時間,其中Chrome的過期時間是1分鐘,在這個期限內不會重新請求DNS。Chrome瀏覽器看本身的DNS緩存時間比較方便,在地址欄輸入:
chrome://net-internals/#dns
DNS prefetch
概述
DNS(Domain Name System, 功能變數名稱系統),是功能變數名稱和IP地址相互映射的一個分散式資料庫。DNS 查詢就是將功能變數名稱轉換成 IP 的過程,這個過程短的話 2ms 幾乎無感,長則可能達到幾秒鐘。
當瀏覽器訪問一個功能變數名稱的時候,需要解析一次DNS,獲得對應功能變數名稱的ip地址。在解析過程中,按照瀏覽器緩存、系統緩存、路由器緩存、ISP(運營商)DNS緩存、根功能變數名稱伺服器、頂級功能變數名稱伺服器、主功能變數名稱伺服器的順序,逐步讀取緩存,直到拿到IP地址。
DNS Prefetch,即DNS預解析就是根據瀏覽器定義的規則,提前解析之後可能會用到的功能變數名稱,使解析結果緩存到系統緩存中,縮短DNS解析時間,來提高網站的訪問速度。
使用
現代瀏覽器在 DNS Prefetch 上做了兩項工作:
- 1、html 源碼下載完成後,會解析頁面的包含鏈接的標簽,提前查詢對應的功能變數名稱。
- 2、對於訪問過的頁面,瀏覽器會記錄一份功能變數名稱列表,當再次打開時,會在 html 下載的同時去解析 DNS。
DNS預解析分為以下兩種:
自動解析
瀏覽器使用超鏈接的href屬性來查找要預解析的主機名。當遇到a標簽,瀏覽器會自動將href中的功能變數名稱解析為IP地址,這個解析過程是與用戶瀏覽網頁並行處理的。但是為了確保全全性,在HTTPS頁面中不會自動解析。
手動解析
在頁面添加如下標記:
<link rel="dns-prefetch" href="//g.alicdn.com" />
上面的link
標簽會讓瀏覽器預取"g.alicdn.com"的解析
希望在HTTPS
頁面開啟自動解析功能時,添加如下標記:
<meta http-equiv="x-dns-prefetch-control" content="on">
希望在HTTP
頁面關閉自動解析功能時,添加如下標記:
<meta http-equiv="x-dns-prefetch-control" content="off">
並非所有頁面都要手動解析,一般在整個站點的入口頁做這個工作就行了,畢竟一個站點下用到的大多數功能變數名稱都會在首頁體現。
看下淘寶首頁的DNS解析預解析代碼:
<link rel="dns-prefetch" href="//g.alicdn.com" /> <link rel="dns-prefetch" href="//img.alicdn.com" /> <link rel="dns-prefetch" href="//tce.alicdn.com" /> <link rel="dns-prefetch" href="//gm.mmstat.com" /> <link ref="dns-prefetch" href="//tce.taobao.com" /> <link rel="dns-prefetch" href="//log.mmstat.com" /> <link rel="dns-prefetch" href="//tui.taobao.com" /> <link rel="dns-prefetch" href="//ald.taobao.com" /> <link rel="dns-prefetch" href="//gw.alicdn.com" /> <link rel="dns-prefetch" href="//atanx.alicdn.com"/> <link rel="dns-prefetch" href="//dfhs.tanx.com"/> <link rel="dns-prefetch" href="//ecpm.tanx.com" /> <link rel="dns-prefetch" href="//res.mmstat.com" />
作用
DNS Prefetch有效縮短了DNS的解析時間
如果瀏覽器最近將一個功能變數名稱解析為IP地址,所屬的操作系統將會緩存,下一次DNS解析時間可以低至0-1ms。 如果結果不在系統本地緩存,則需要讀取路由器的緩存,則解析時間的最小值大約為15ms。如果路由器緩存也不存在,則需要讀取ISP(運營商)DNS緩存,一般像taobao.com
、baidu.com
這些常見的功能變數名稱,讀取ISP(運營商)DNS緩存需要的時間在80-120ms,如果是不常見的功能變數名稱,平均需要200-300ms。一般的網站在運營商這裡都能查詢的到,所以普遍來說DNS Prefetch可以給一個功能變數名稱的DNS解析過程帶來15-300ms的提升,尤其是一些大量引用很多其他功能變數名稱資源的網站,提升效果就更加明顯了
瀏覽器底層緩存進行了建模,當Chrome瀏覽器啟動的時候,就會自動的快速解析瀏覽器最近一次啟動時記錄的前10個功能變數名稱。所以經常訪問的網址就沒有DNS解析的延遲,打開速度更快。