提高網頁的打開(kāi)速度,一(yī)般地我(wǒ)們會選擇使用CDN,利用“就近原則”讓用戶在最短的時間内獲取到服務器資(zī)源,實際應用當中(zhōng)采用CDN的方式提高網站訪問速度的效果也是最明顯的。這也就是爲什麽國外(wài)的空間打開(kāi)速度遠不及國内的主機的訪問速度的原因了。
我(wǒ)們知(zhī)道在用戶訪問網站時先得經過域名DNS解析這一(yī)過程,可能很多人對于DNS解析時間平常并沒有太在意。性能穩定、響應時間快的DNS域名解析服務與不穩定、響應過慢(màn)的DNS的域名解析時間可能相差1秒,而對于網站存在過多的域名解析請求,這個時間積累起來就非常地多了。
本篇文章就來分(fēn)享一(yī)下(xià)通過優化網站DNS域名解析,減少域名DNS解析時間,從而讓網站在原來的訪問速度的前提下(xià)繼續實現新的飛躍。
減少域名DNS解析時間将網頁加載速度提升到新層次-DNS緩存/預加載/多域名
一(yī)、域名DNS解析原理和過程
1、DNS是怎麽來的?DNS 是域名系統 (Domain Name System) 的縮寫。在Internet上域名與IP地址之間是一(yī)對一(yī)(或者多對一(yī))的,域名雖然便于人們記憶,但機器之間隻能互相認識IP地址,它們之間的轉換工(gōng)作稱爲域名解析,域名解析需要由專門的域名解析服務器來完成,DNS就是進行域名解析的服務器。
2、DNS解析的基本過程一(yī):查找本地域名DNS緩存。當用戶通過浏覽器訪問某域名時,浏覽器首先會在自己的緩存中(zhōng)查找是否有該域名對應的IP地址,例如計算機系統Hosts文件域名對應IP、路由器緩存、ISP(互聯網服務提供商(shāng))DNS緩存。
3、DNS解析的基本過程二:通過上面的DNS查詢依然沒有找到想你的域名對應的IP地址,那麽就要進入根服務器進行查詢。全球共有13台根邏輯域名服務器。這13台邏輯根域名服務器中(zhōng)名字分(fēn)别爲“A”至“M”,真實的根服務器在2014年1月25日的數據爲386台,分(fēn)布于全球各大(dà)洲。
4、在根域名服務器中(zhōng)雖然沒有每個域名的具體(tǐ)信息,但儲存了負責每個域(如COM、NET、ORG等)的解析的域名服務器的地址信息。根域名服務器會将其管轄範圍内頂級域名(如.com)服務器IP告訴本地DNS服務器,這樣你的域名查詢請求會進入到相應的頂級域名服務器。
5、DNS解析的基本過程三:頂級域名服務器收到請求後查看區域文件記錄,若無則将其管轄範圍内主域名(不帶任何前綴的域名,如freehao123.com)服務器的IP地址告訴本地DNS服務器。如果還是沒有找到,則進入到下(xià)一(yī)級域名服務器進行查找。如此重複,直到找到正确的結果爲止。
6、查找到正确的域名對應IP地址後,本地域名服務器把返回的結果保存到緩存,以備下(xià)一(yī)次使用,同時将該結果反饋給客戶端,客戶端通過這個IP地址與web服務器建立鏈接。于是你的浏覽器就正常訪問網站了。下(xià)圖是對Google.com爲例,解釋用戶在訪問谷歌時DNS解析的全過程。
二、浏覽器加載網頁的基本過程
1、從浏覽器地址欄的請求鏈接開(kāi)始,浏覽器通過DNS解析查到域名映射的IP地址,成功之後浏覽器端向此IP地址取得連接,成功連接之後,浏覽器端将請求頭信息通過HTTP協議向此IP地址所在服務器發起請求,服務器接受到請求之後等待處理。
3、什麽原因會導緻網頁加載過慢(màn)?浏覽器可以在下(xià)載CSS資(zī)源的同時,并行解析HTML文件,但是,一(yī)旦發現有腳本文件的引用,則必須等待腳本文件完成下(xià)載并且執行後才能繼續解析。内容下(xià)載時間主要取決于用戶帶寬、服務器帶寬、文件大(dà)小(xiǎo)、文件數量等。
三、合理利用DNS TTL值 增加域名的緩存命中(zhōng)率
1、DNS 服務器采用遞歸或叠代來處理客戶端查詢時,它們将發現并獲得大(dà)量有關 DNS 命名空間的重要信息。然後這些信息由服務器緩存。緩存爲 DNS 解析流行名稱的後續查詢提供了加速性能的方法,同時大(dà)大(dà)減少了網絡上與 DNS 相關的查詢通信量。
3、适當地增大(dà)TTL值可以讓DNS Server緩存該域名更長時間,增加緩存的命中(zhōng)率。TTL一(yī)般默認爲一(yī)小(xiǎo)時,可以根據實際情況設爲一(yī)天甚至一(yī)周以上。當然,如果你域名的IP經常變化,則TTL不應過大(dà),否則各地的DNS Server會暫時無法獲得新的正确的IP地址。
四、合理使用DNS-prefetch讓DNS預讀取
1、從上面浏覽器加載網頁的過程可以看出,網頁的請求是可以多任務同時進行的,對于網頁有多個DNS請求的情況,可以讓浏覽器在後台先把要使用的DNS請求默默地完成,這樣當用戶在打開(kāi)新的網頁時,就可以節省DNS查詢的時間了。
2、控制浏覽器的DNS預讀取就是DNS-prefetch标簽了,DNS Prefetch應該盡量的放(fàng)在網頁的前面,格式類似是:
很多網站都使用使用百度廣告聯盟代碼,使用這個就可以預讀取DNS了。
3、默認情況下(xià)浏覽器會有隐式的DNS Prefetch,即會對頁面中(zhōng)和當前域名(正在浏覽網頁的域名)不在同一(yī)個域的域名進行預獲取,并且緩存結果,我(wǒ)們可以通過下(xià)面的标簽禁止隐式的DNS Prefetch:
4、需要注意的就是,DNS Prefetch隻需要在用戶在第一(yī)次打開(kāi)網站時使用即可,沒有必要每個頁面都使用DNS Prefetch,否則就是重複DNS讀取了,反而還無形中(zhōng)增加了DNS查詢的次數,效果适得其反。
五、DNS域名解析拆分(fēn)爲多個域名增加并行下(xià)載量
1、一(yī)般來說網頁的内容加載時會發生(shēng)多個域名請求服務,如果你的網站JS、CSS、圖片等非常多的話(huà),建議将這些文件分(fēn)别放(fàng)在不同的域名上,這樣浏覽器在打開(kāi)某一(yī)個頁面時就可以同時向這些域名發送DNS解析請求了,能在一(yī)定程度上減少DNS時間。
2、網頁的内容越多,分(fēn)析的域名應該盡量多一(yī)些。例如html、htm,js、css,jpg、png、gif,php、asp都可以放(fàng)在不同的域名上。在實際應用上,使用全站CDN或者是靜态文件CDN就可以實現上述效果,并且結合css sprite一(yī)起來使用的。
3、css sprite的作用恰恰相反,它不是增加域名請求,而減少域名DNS請求,主要是用在圖片上。它允許你将一(yī)個頁面涉及到的所有零星圖片都包含到一(yī)張大(dà)圖中(zhōng)去(qù),這樣一(yī)來,當訪問該頁面時,載入的圖片就不會像以前那樣一(yī)幅一(yī)幅地慢(màn)慢(màn)顯示出來了。
六、加快域名DNS解析速度方法小(xiǎo)結
1、本文介紹的用DNS緩存、DNS預讀取、拆分(fēn)域名來減少域名DNS解析的時間的方法,對于一(yī)般的網站的加速效果可能并不明顯,但是對于一(yī)些每天DNS請求達到上百萬級以上的網站,DNS加速的效果就顯而易見了。另外(wài),如果發現自己的網站響應速度過慢(màn),不妨好好檢查一(yī)下(xià)網頁的DNS用時。
2、除了從網站本身的DNS解析來加快訪問速度外(wài),我(wǒ)們平常在選擇DNS服務時盡量使用那些穩定可靠的DNS服務,這樣的DNS服務響應速度和緩存率都是非常不錯的。假如自己的網站分(fēn)拆了多個二級域名,不妨好好用用CNAME,設置好TTL時間,保證網站的第一(yī)次解析,可以直接從運營商(shāng)的DNS緩存中(zhōng)拿到。