1. 程式人生 > >網站的靜態資源為什麼要使用獨立域名,竟然對訪問效能還有如此大的影響

網站的靜態資源為什麼要使用獨立域名,竟然對訪問效能還有如此大的影響

在大型網站中,我們發現頁面資源經常使用不同的域名進行引用,例如126郵箱的部分js、css、圖片存放於http://mimg.127.net/域名下,京東的部分靜態圖片存放在http://img11.360buyimg.com域名下,那這樣做究竟有什麼好處呢,和效能又有什麼關係呢,下面進行具體分析。

一、瀏覽器併發請求數的限制

我們進行網站頁面訪問時的客戶端是瀏覽器,瀏覽器的很多機制對網站的訪問速度有很大的影響(例如瀏覽器對靜態資源的快取機制),此外瀏覽器為提升頁面顯示效率,支援併發獲取資源,如下是不同瀏覽器的版本對併發的支援:


瀏覽器對併發請求的數目限制是針對域名的,即針對同一域名(包括二級域名)在同一時間支援的併發請求數量的限制。如果請求數目超出限制,則會阻塞。因此,網站中對一些靜態資源,使用不同的一級域名,可以提升瀏覽器並行請求的數目,加速介面資源的獲取速度。

二、網路請求時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上:


此外,獨立的域名也方便我們在代理服務層做動靜分離,以便提升靜態請求的處理速度。