1. 程式人生 > >減少域名DNS解析時間將網頁載入速度提升新層次-DNS快取/預讀取/拆分域名

減少域名DNS解析時間將網頁載入速度提升新層次-DNS快取/預讀取/拆分域名

提高網頁的開啟速度,一般地我們會選擇使用CDN,利用“就近原則”讓使用者在最短的時間內獲取到伺服器資源,實際應用當中採用CDN的方式提高網站訪問速度的效果也是最明顯的。這也就是為什麼國外的空間開啟速度遠不及國內的主機的訪問速度的原因了。

我們知道在使用者訪問網站時先得經過域名DNS解析這一過程,可能很多人對於DNS解析時間平常並沒有太在意。效能穩定、響應時間快的DNS域名解析服務與不穩定、響應過慢的DNS的域名解析時間可能相差1秒,而對於網站存在過多的域名解析請求,這個時間積累起來就非常地多了。

本篇文章就來分享一下通過優化網站DNS域名解析,減少域名DNS解析時間,從而讓網站在原來的訪問速度的前提下繼續實現新的飛躍。想要了解更多的有關於網站和伺服器優化加速的方法,可以試試:

減少域名DNS解析時間將網頁載入速度提升到新層次-DNS快取/預載入/多域名

一、域名DNS解析原理和過程

1、DNS是怎麼來的?DNS 是域名系統 (Domain Name System) 的縮寫。在Internet上域名與IP地址之間是一對一(或者多對一)的,域名雖然便於人們記憶,但機器之間只能互相認識IP地址,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析伺服器來完成,DNS就是進行域名解析的伺服器。

2、DNS解析的基本過程一:查詢本地域名DNS快取。當用戶通過瀏覽器訪問某域名時,瀏覽器首先會在自己的快取中查詢是否有該域名對應的IP地址,例如計算機系統Hosts檔案域名對應IP、路由器快取、ISP(網際網路服務提供商)DNS快取。

域名DNS解析的原理

3、DNS解析的基本過程二:通過上面的DNS查詢依然沒有找到想你的域名對應的IP地址,那麼就要進入根伺服器進行查詢。全球共有13臺根邏輯域名伺服器。這13臺邏輯根域名伺服器中名字分別為“A”至“M”,真實的根伺服器在2014年1月25日的資料為386臺,分佈於全球各大洲。

4、在根域名伺服器中雖然沒有每個域名的具體資訊,但儲存了負責每個域(如COM、NET、ORG等)的解析的域名伺服器的地址資訊。根域名伺服器會將其管轄範圍內頂級域名(如.com)伺服器IP告訴本地DNS伺服器,這樣你的域名查詢請求會進入到相應的頂級域名伺服器。

5、DNS解析的基本過程三:頂級域名伺服器收到請求後檢視區域檔案記錄,若無則將其管轄範圍內主域名(不帶任何字首的域名,如freehao123.com)伺服器的IP地址告訴本地DNS伺服器。如果還是沒有找到,則進入到下一級域名伺服器進行查詢。如此重複,直到找到正確的結果為止。

6、查詢到正確的域名對應IP地址後,本地域名伺服器把返回的結果儲存到快取,以備下一次使用,同時將該結果反饋給客戶端,客戶端通過這個IP地址與web伺服器建立連結。於是你的瀏覽器就正常訪問網站了。下圖是對Google.com為例,解釋使用者在訪問谷歌時DNS解析的全過程。(點選放大)

域名DNS解析全過程

二、瀏覽器載入網頁的基本過程

1、從瀏覽器位址列的請求連結開始,瀏覽器通過DNS解析查到域名對映的IP地址,成功之後瀏覽器端向此IP地址取得連線,成功連線之後,瀏覽器端將請求頭資訊通過HTTP協議向此IP地址所在伺服器發起請求,伺服器接受到請求之後等待處理。

域名解析的時間

2、覽器載入顯示html的順序是:從上到下,渲染的順序也是從上到下,下載和渲染是同時進行的。如果遇到語義解釋性的標籤嵌入檔案(JS指令碼,CSS 下載過程會啟用單獨連線進行下載,並且在下載後進行解析,解析過程中,停止頁面所有往下元素的下載。(點選放大)

瀏覽器載入網頁的時間線

3、什麼原因會導致網頁載入過慢?瀏覽器可以在下載CSS資源的同時,並行解析HTML檔案,但是,一旦發現有指令碼檔案的引用,則必須等待指令碼檔案完成下載並且執行後才能繼續解析。內容下載時間主要取決於使用者頻寬、伺服器頻寬、檔案大小、檔案數量等。

三、合理利用DNS TTL值 增加域名的快取命中率

1、DNS 伺服器採用遞迴或迭代來處理客戶端查詢時,它們將發現並獲得大量有關 DNS 名稱空間的重要資訊。然後這些資訊由伺服器快取。快取為 DNS 解析流行名稱的後續查詢提供了加速效能的方法,同時大大減少了網路上與 DNS 相關的查詢通訊量。

合理利用DNS TTL值

2、TTL(Time-To-Live)即一條域名解析記錄在DNS伺服器上快取時間。當資訊快取時,生存時間 (TTL) 值適用於所有快取的 RR。只要快取 RR 的 TTL 沒有到期,DNS 伺服器就可繼續快取並再次使用 RR 來應答與這些 RR 相匹配的客戶端提出的查詢。

提高域名DNS伺服器快取時間

3、適當地增大TTL值可以讓DNS Server快取該域名更長時間,增加快取的命中率。TTL一般預設為一小時,可以根據實際情況設為一天甚至一週以上。當然,如果你域名的IP經常變化,則TTL不應過大,否則各地的DNS Server會暫時無法獲得新的正確的IP地址。

四、合理使用DNS-prefetch讓DNS預讀取

1、從上面瀏覽器載入網頁的過程可以看出,網頁的請求是可以多工同時進行的,對於網頁有多個DNS請求的情況,可以讓瀏覽器在後臺先把要使用的DNS請求默默地完成,這樣當用戶在開啟新的網頁時,就可以節省DNS查詢的時間了。

使用DNS預讀取加快網頁開啟速度

2、控制瀏覽器的DNS預讀取就是DNS-prefetch標籤了,DNS Prefetch應該儘量的放在網頁的前面,格式類似是:<link rel=”dns-prefetch” href=”https://cb.baidu.com”/>,很多網站都使用使用百度廣告聯盟程式碼,使用這個就可以預讀取DNS了。

3、預設情況下瀏覽器會有隱式的DNS Prefetch,即會對頁面中和當前域名(正在瀏覽網頁的域名)不在同一個域的域名進行預獲取,並且快取結果,我們可以通過下面的標籤禁止隱式的DNS Prefetch:<meta http-equiv=”x-dns-prefetch-control” content=”off”>

4、需要注意的就是,DNS Prefetch只需要在使用者在第一次開啟網站時使用即可,沒有必要每個頁面都使用DNS Prefetch,否則就是重複DNS讀取了,反而還無形中增加了DNS查詢的次數,效果適得其反。

五、DNS域名解析拆分為多個域名增加並行下載量

1、一般來說網頁的內容載入時會發生多個域名請求服務,如果你的網站JS、CSS、圖片等非常多的話,建議將這些檔案分別放在不同的域名上,這樣瀏覽器在開啟某一個頁面時就可以同時向這些域名傳送DNS解析請求了,能在一定程度上減少DNS時間。(點選放大)

DNS域名解析拆分為多個域名

2、網頁的內容越多,分析的域名應該儘量多一些。例如html、htm,js、css,jpg、png、gif,php、asp都可以放在不同的域名上。在實際應用上,使用全站CDN或者是靜態檔案CDN就可以實現上述效果,並且結合css sprite一起來使用的。

減少網頁的DNS請求次數

3、css sprite的作用恰恰相反,它不是增加域名請求,而減少域名DNS請求,主要是用在圖片上。它允許你將一個頁面涉及到的所有零星圖片都包含到一張大圖中去,這樣一來,當訪問該頁面時,載入的圖片就不會像以前那樣一幅一幅地慢慢顯示出來了。

六、加快域名DNS解析速度方法小結

1、本文介紹的用DNS快取、DNS預讀取、拆分域名來減少域名DNS解析的時間的方法,對於一般的網站的加速效果可能並不明顯,但是對於一些每天DNS請求達到上百萬級以上的網站,DNS加速的效果就顯而易見了。另外,如果發現自己的網站響應速度過慢,不妨好好檢查一下網頁的DNS用時。

2、除了從網站本身的DNS解析來加快訪問速度外,我們平常在選擇DNS服務時儘量使用那些穩定可靠的DNS服務,這樣的DNS服務響應速度和快取率都是非常不錯的。假如自己的網站分拆了多個二級域名,不妨好好用用CNAME,設定好TTL時間,保證網站的第一次解析,可以直接從運營商的DNS快取中拿到。