利用多域名存儲靜態資源進行性能優化:網站的靜態資源爲何要使用獨立域名

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

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

  咱們進行網站頁面訪問時的客戶端是瀏覽器,瀏覽器的不少機制對網站的訪問速度有很大的影響(例如瀏覽器對靜態資源的緩存機制),此外瀏覽器爲提高頁面顯示效率,支持併發獲取資源,可是同一時間針對同一域名下的請求有必定數量限制,超過限制數目的請求會被阻塞。大多數瀏覽器的併發數量都控制在6之內。有些資源的請求時間很長,於是會阻塞其餘資源的請求。所以,對於一些靜態資源,若是放到不一樣的域名下面就能實現與其餘資源的併發請求。緩存

  此外,瀏覽器對併發請求的數目限制是針對域名的,即針對同一域名(包括二級域名)在同一時間支持的併發請求數量的限制。若是請求數目超出限制,則會阻塞。所以,網站中對一些靜態資源,使用不一樣的一級域名,能夠提高瀏覽器並行請求的數目,加速界面資源的獲取速度。服務器

  於是後來衍生了domain dash來加大併發數,可是過多的域名會使DNS解析負擔加劇,所以通常控制在2-4個cookie

  對於圖片資源的加載,利用css sprites技術,結合background的定位在同一張圖片中加載多個圖片,這也是減小併發數量的一種經常使用方法。網絡

2、網絡請求時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。dom

  因此對於靜態資源使用單獨的域名,並設置爲無cookie,以減小請求大小,提升網頁性能。性能

3、方便分流或緩存

  咱們知道,當面對大併發訪問時,在服務端會有相應的緩存機制,例如咱們會在CDN中緩存一些靜態資源,以便用戶能夠經過就近的網絡節點獲取資源。例如新浪微博在加載資源時,不少就放在了阿里的CDN上。

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

  CDN緩存:CDN是構建在網絡之上的內容分發網絡,依靠部署在各地的邊緣服務器,經過中心平臺的負載均衡、內容發佈、調度等功能模塊,是用戶就近獲取所需內容,下降網絡擁塞,提升用戶訪問響應速度和命中率。CDN的關鍵技術主要是內容存儲和分佈技術。簡單來講,CDN主要用來使用戶就近獲取資源。

相關文章
相關標籤/搜索