Yslow性能測(cè)試前端調(diào)優(yōu)23大規(guī)則(9)減少DNS查找

性能測(cè)試前端優(yōu)化

DNS(Domain Name System,域名系統(tǒng)),萬(wàn)維網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問互聯(lián)網(wǎng),不用記住能夠被機(jī)器直接讀取的IP數(shù)串。通過域名,得到該域名對(duì)應(yīng)IP地址的過程叫做域名解析(或主機(jī)名解析)。DNS將主機(jī)名映射到IP地址上,就像電話本將人名映射到所對(duì)應(yīng)的電話號(hào)碼一樣,當(dāng)在瀏覽器中輸入http://www.baidu.com時(shí),連接到瀏覽器DNS解析器返回服務(wù)器的IP地址。像百度官網(wǎng)的IP地址為14.215.177.38。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號(hào)53。在RFC文檔中RFC 2181對(duì)DNS有規(guī)范說明,RFC 2136對(duì)DNS的動(dòng)態(tài)更新進(jìn)行說明,RFC 2308對(duì)DNS查詢的反向緩存進(jìn)行說明。

然而,DNS解析也是存在開銷的,通常瀏覽器查找一個(gè)指定主機(jī)名的IP地址,需要花費(fèi)20到120ms,在DNS解析完成之前,瀏覽器不能從主機(jī)名那里下載任何東西。DNS的查找有以下幾個(gè)步驟:

1) 瀏覽器檢查自身緩存中有沒有被解析過的這個(gè)域名對(duì)應(yīng)的IP地址,如果存在解析就結(jié)束了。

2) 如果瀏覽器緩存中命中,即沒有找到,那么瀏覽器會(huì)檢查操作系統(tǒng)緩存中有沒有對(duì)應(yīng)的已解析過的結(jié)果。在windows操作系統(tǒng)C:\Windows\System32\Drivers\etc路徑下有一個(gè)hosts的文件,在這里如果指定了一個(gè)域名對(duì)應(yīng)的IP地址,那么瀏覽器會(huì)首先使用這個(gè)IP地址進(jìn)行訪問。

3) 如果前面兩步都沒有命中域名,那么才會(huì)請(qǐng)求本地的域名服務(wù)器(LDNS)來解析這個(gè)域名,大約80%的域名解析會(huì)到這里完成。

4) 如果LDNS仍然沒有命中,就會(huì)直接跳到Root Server域名服務(wù)器請(qǐng)求解析。

5) Root Server域名服務(wù)器會(huì)返回一個(gè)查詢域的主域名服務(wù)器給LDNS。

6) 此時(shí)LDNS再發(fā)送一個(gè)請(qǐng)求給上一步返回的主域名服務(wù)器。

7) 接受請(qǐng)求的主域名服務(wù)器查找并返回這個(gè)域名對(duì)應(yīng)的Name Server的地址,Name Server是網(wǎng)站注冊(cè)的域名服務(wù)器。

8) Name Server根據(jù)映射關(guān)系表找一目標(biāo)IP,返回給LDNS。LDNS緩存這個(gè)域名和對(duì)應(yīng)的IP。

9) LDNS把解析的結(jié)果返回給用戶,用戶根據(jù)TTL值緩存到本地系統(tǒng)緩存中。

DNS解析的響應(yīng)時(shí)間依賴于DNS解析器、它所承擔(dān)的請(qǐng)求壓力、客戶端與服務(wù)器的距離和帶寬速度。

TTL(Time To Live)表示查找返回的DNS記錄包含的一個(gè)存活時(shí)間,表明記錄可以被緩存多久,這個(gè)值告訴客戶端可以對(duì)該記錄緩存多久。過期則這個(gè)DNS記錄將被拋棄。盡管操作系統(tǒng)緩存會(huì)考慮TTL值,但瀏覽器通常忽略該值,賆設(shè)置它自己的時(shí)間限制。并且瀏覽器對(duì)緩存DNS的記錄數(shù)量也是有限制的,而不管緩存記錄時(shí)間,如果用戶在短時(shí)間訪問了很多不同域名的網(wǎng)站,較早的DNS記錄將被丟棄,必須重新查詢?cè)撚蛎?/p>

不同的瀏覽器對(duì)于DNS緩存有所不同,Internet Explorer的DNS緩存在[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]鍵下由三個(gè)設(shè)置控制:

"DnsCacheTimeout"=30分鐘

"KeepAliveTimeout"=1分鐘

"ServerInfoTimeOut"=2分鐘

這表示如果DNS服務(wù)器TTL值小于30分鐘的話,對(duì)瀏覽器進(jìn)行DNS查找的頻率產(chǎn)生的影響很小。

對(duì)于FireFox瀏覽器在about:config中設(shè)置就可以:

network.dnsCacheEntries=400

network.dnsCacheExpiration=60

network.http.keep-alive.timeout=115

在DNS解析過程中,減少唯一主機(jī)名的數(shù)量也呆以縮短DNS解析時(shí)間,如果客戶端的DNS緩存為空時(shí),DNS查找的數(shù)量與Web頁(yè)面中唯一主機(jī)名的數(shù)量相等。但是減少唯一主機(jī)名的數(shù)量有可能減少頁(yè)面中發(fā)生的并行下載量。減少并行下載可能會(huì)增加響應(yīng)時(shí)間。我的準(zhǔn)則是將這些組件分成至少兩個(gè)但不超過四個(gè)主機(jī)名。這在減少DNS查找和允許高度并行下載之間取得了很好的折衷。

綜上所述減少DNS查找通??梢蕴岣唔憫?yīng)性能。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 非常好的文章,怕博主刪除,再也找不到這么好的文章了,所以復(fù)制了一份,博主是2016年寫,但是是到現(xiàn)在為止看到的,思...
    吭聲_cfdc閱讀 2,169評(píng)論 0 4
  • “DNS”這個(gè)單字,想必那些經(jīng)常使用計(jì)算機(jī),尤其是經(jīng)常手動(dòng)配置IP和DNS服務(wù)器的人是非常熟悉的。也許其中的大部...
    Ulrich蚊子閱讀 2,877評(píng)論 0 6
  • 在瀏覽器輸入想要訪問的域名之后,瀏覽器會(huì)進(jìn)行域名解析獲得IP地址,在經(jīng)過TCP的連接,實(shí)現(xiàn)數(shù)據(jù)的傳輸就會(huì)有兩種報(bào)文...
    古巷掛青燈閱讀 1,335評(píng)論 0 1
  • 為什么需要DNS解析域名為IP地址? 網(wǎng)絡(luò)通訊大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以計(jì)算...
    後來的後來hugh閱讀 882評(píng)論 1 1
  • 無(wú)論何時(shí),一旦發(fā)現(xiàn)有火災(zāi)苗頭,如煙、油、味、色等異常狀態(tài),每一位員工都必須立即向消防監(jiān)控室報(bào)警(注意:當(dāng)現(xiàn)場(chǎng)異味為...

友情鏈接更多精彩內(nèi)容