利用多域名存儲靜態資源進行性能優化:網站的靜態資源為什麽要使用獨立域名
在大型網站中,我們發現頁面資源經常使用不同的域名進行引用,例如126郵箱的部分js、css、圖片存放於http://mimg.127.net/域名下,京東的部分靜態圖片存放在http://img11.360buyimg.com域名下,那這樣做究竟有什麽好處呢,和性能又有什麽關系呢,下面進行具體分析。
一、瀏覽器並發請求數的限制
我們進行網站頁面訪問時的客戶端是瀏覽器,瀏覽器的很多機制對網站的訪問速度有很大的影響(例如瀏覽器對靜態資源的緩存機制),此外瀏覽器為提升頁面顯示效率,支持並發獲取資源,但是同一時間針對同一域名下的請求有一定數量限制,超過限制數目的請求會被阻塞。大多數瀏覽器的並發數量都控制在6以內
此外,瀏覽器對並發請求的數目限制是針對域名的,即針對同一域名(包括二級域名)在同一時間支持的並發請求數量的限制。如果請求數目超出限制,則會阻塞。因此,網站中對一些靜態資源,使用不同的一級域名,可以提升瀏覽器並行請求的數目,加速界面資源的獲取速度。
因而後來衍生了domain dash來加大並發數,但是過多的域名會使DNS解析負擔加重,因此一般控制在2-4個。
對於圖片資源的加載,利用css sprites技術,結合background的定位在同一張圖片中加載多個圖片,這也是減少並發數量的一種常用方法。
二、網絡請求時cookie傳輸
當靜態資源與主服務在同一域名下(根據業務需要,主服務請求時需要傳遞cookie信息),每次靜態資源的請求,都會發送同域名下的cookie。而對於靜態資源,服務器無需對cookie進行任何處理,它們只是在毫無意義的消耗帶寬。
假設網站cookie信息有1 KB、網站首頁共150個資源時,用戶在請求過程中需要發送150 KB的cookie信息,在512 Kbps的常見上行帶寬下,需要長達3秒左右才能全部發送完畢。很多情況下cookie的path是在整個一級域名下可用的,如果你把靜態資源設置成二級域名,那麽它也避免不了cookie。例如如果給 http://126.com 設置了cookie,那麽會感染所有子域名, 請求 http://www.126.com/logo.gif或者http://image.126.com/logo.gif 時便會帶上討厭的cookie。
所以對於靜態資源使用單獨的域名,並設置為無cookie,以減少請求大小,提高網頁性能。
三、方便分流或緩存
我們知道,當面對大並發訪問時,在服務端會有相應的緩存機制,例如我們會在CDN中緩存一些靜態資源,以便用戶可以通過就近的網絡節點獲取資源。例如新浪微博在加載資源時,很多就放在了阿裏的CDN上。
此外,獨立的域名也方便我們在代理服務層做動靜分離,以便提升靜態請求的處理速度。
CDN緩存:CDN是構建在網絡之上的內容分發網絡,依靠部署在各地的邊緣服務器,通過中心平臺的負載均衡、內容發布、調度等功能模塊,是用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。CDN的關鍵技術主要是內容存儲和分布技術。簡單來說,CDN主要用來使用戶就近獲取資源。
利用多域名存儲靜態資源進行性能優化:網站的靜態資源為什麽要使用獨立域名