提升網頁的打開速度,通常地咱們會選擇使用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 緩存中拿到。