誕生背景:
1、DNS:domain name system,域名系統,瀏覽器請求第三方服務器資源時,必須要將該域名解析為ip地址,瀏覽器才能發出請求,這個過着叫DNS。DNS實現了域名到ip的映射
2、DNS請求雖然占用了很少的帶寬,但會有很高的延遲,尤其在移動端會更加明顯。
DNS緩存可以幫助減少此延遲,而DNS解析會導致請求增加明顯的延遲。對於打開了與許多第三方連接的網站,此延遲會降低加載性能,例如:淘寶、京東
3、火狐瀏覽器上使用dns-prefetch,它是與頁面加載並行處理的,不會影響到頁面加載的性能
什么是dns-prefetch:
DNS預解析,嘗試在請求資源之前解析域名。可能是后面要加載的文件,也可能是用戶將要打開的鏈接
dns-prefetch可以幫助開發人員掩蓋DNS解析延遲
HTML屬性,容錯性非常好。不支持的瀏覽器遇到dns-prefetch提示,網站不會被中斷
如何設置dns-prefetch:
如果需要瀏覽器對特定的域名進行解析,可以在頁面中添加link標簽實現,例如:
<link rel="dns-prefetch" href="//g.alicdn.com" /> <link rel="dns-prefetch" href="//img.alicdn.com" />
注意事項:
1、dns-prefetch僅僅對跨域域上的DNS查找有效,因此避免使用dns-prefetch指向自己的站點或域。因為當瀏覽器執行到這行時,你設置的站點或域背后的ip已經被解析了,寫了也是白寫
2、如果該站點是通過https服務的,則此過程包括DNS解析,建立TCP連接以及執行TLS握手。可以將dns-prefetch與preconnect一起使用,dns-prefetch僅執行DNS預解析,preconnect會建立與服務器的連接,將二者結合起來可以進一步減少跨域請求的延遲
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin> <link rel="dns-prefetch" href="https://fonts.gstatic.com/">
tip:如果頁面需要建立許多與第三方的連接,將它們預先連接會適得其反。preconnect最好僅使用在最關鍵的那個連接上,其他的連接只需使用dns-prefetch即可節省DNS查找的時間
3、dns-prefetch有個默認加載條件,網頁中使用a標簽href屬性帶的域名,不需要在head標簽中加link手動設置的。但是a標簽的默認啟動在https不起作用,這時需要使用meta里面http-equiv來強制啟動功能
<meta http-equiv="x-dns-prefetch-control" content="on">
典型案例:
1、淘寶
2、京東