1. 程式人生 > >Web前端效能優化:減少DNS查詢

Web前端效能優化:減少DNS查詢

DNS(Domain Name System): 負責將域名URL轉化為伺服器主機IP。

DNS查詢流程:首先檢視瀏覽器快取是否存在,不存在則訪問本機DNS快取,再不存在則訪問本地DNS伺服器。所以DNS也是開銷,通常瀏覽器查詢一個給定URL的IP地址要花費20-120ms,在DNS查詢完成前,瀏覽器不能從host那裡下載任何東西。

域名TTL值

TTL(Time-To-Live),就是一條域名解析記錄在DNS伺服器中的存留時間。當各地的DNS伺服器接受到解析請求時,就會向域名指定的NS伺服器(權威域名伺服器)發出解析請求從而獲得解析記錄;在獲得這個記錄之後,記錄會在DNS伺服器(各地的快取伺服器,也叫遞迴域名伺服器)中儲存一段時間,這段時間內如果再接到這個域名的解析請求,DNS伺服器將不再向NS伺服器發出請求,而是直接返回剛才獲得的記錄;而這個記錄在DNS伺服器上保留的時間,就是TTL值。

影響DNS快取的因素

1. 伺服器可以設定TTL值表示DNS記錄的存活時間。本機DNS快取將根據這個TTL值判斷DNS記錄什麼時候被拋棄,這個TTL值一般都不會設定很大,主要是考慮到快速故障轉移的問題。

2. 瀏覽器DNS快取也有自己的過期時間,這個時間是獨立於本機DNS快取的,相對也比較短,例如chrome只有1分鐘左右。

3. 瀏覽器DNS記錄的數量也有限制,如果短時間內訪問了大量不同域名的網站,則較早的DNS記錄將被拋棄,必須重新查詢。不過即使瀏覽器丟棄了DNS記錄,作業系統的DNS快取也有很大機率保留著該記錄,這樣可以避免通過網路查詢而帶來的延遲。

最佳實踐

當客戶端的DNS快取為空時,DNS查詢的數量與Web頁面中唯一主機名的數量相等。所以減少唯一主機名的數量就可以減少DNS查詢的數量。

然而減少唯一主機名的數量會潛在地減少頁面中並行下載的數量,避免DNS查詢降低了響應時間,但減少並行下載可能會增加響應時間。當頁面的元件量比較多的時候,可以考慮將元件分別放到至少2-4個主機名,已獲得最大收益。