域名發散--前端優化(三)

話說天下大勢,分久必合,合久必分css

其實域名也是同樣,分分合合, 不論是域名收斂仍是域名發散,都有着本身獨特的應用場景。
目前, 在web's top 30,000 URLS 裏面, 平均每一個域名承擔了50個資源的請求,因此,域名的擴散實際上是個很重要的手段.
如今大部分website都推崇這域名的發散
這是爲何呢?爲何呢?爲何呢?html

why is domain sharding important?

域名發散出現的緣由其實真得瀏覽器. md~ 之前網速慢,設備差,稍微流量大一點 Server 就崩潰了。 因此, 爲了保護你的服務器不被強暴到崩潰,瀏覽器要對max connections 有限制.若是每一個用戶的max connections 不限制的話, 結果就是, 服務器的負載能力會低至冰點~
另外還有一個方面就是, 識別用戶不是DDOS attacker. 緣由我就很少說了。 若是有大神的話,能夠DDOS一下,試一試,表示,個人電腦扛不住.前端

What does DS(domain sharding) can do?

因爲瀏覽器的限制,每一個瀏覽器,容許對每一個域名的鏈接數通常是有上限的.

這是browserscrope生成的結果.經過這樣圖,咱們就能夠知道在一些現代瀏覽器內每一個hostname的最大鏈接數基本都是6個,可是IE這個傻逼,不知道抽風了麼? 固然,若是 進行了DS以後 增長鏈接,也仍是有最大的鏈接數的(好比17)。
這裏,爲了講解清晰,我舉個例子吧. 假設如今瀏覽器對每一個域名鏈接數爲1. 那麼現實狀況是.

瀏覽器解析完咱們的文檔以後開始發起請求,對文件進行加載. 而後一個一個文件 在max connections 下進行排隊下載.
但若是咱們使用了域名分散以後,使用多個domain進行資源的下載,就有.

這樣徹底能夠省略掉排隊的時間.提高網頁加載的速度.nginx

how to make DS come true?

使用CNAME進行設置

服務器對於每一個域名的限制只是針對於hostname而已, 就算你的IP地址同樣,也是沒有太大關係的。因此,這裏就可使用CNAME來建立,不一樣域名相同IP的映射.
CNAME全稱就是Canonical Name。 他是DNS服務商提供的一項服務,用來給你的網站設置別名。
好比,你如今的網站是abc.example.com. 可是,你也想使用def.example.com 來訪問相同的網站, 那麼這就須要你使用CNAME 來對你的域名設置alias. 一般不一樣的服務商有着不一樣的設置方法. 好比: 國外的maxCDN
這樣,就能很方便的設置另外的域名來增長你文件的connections number.
另外,還能夠在DNS服務商下申請子域。這些都是可行的.web

DS的最佳實踐

使用DS 並非一本萬利的。 由於在你增長域的同時,每每會給瀏覽器帶來DNS解析的開銷。若是有興趣的同窗能夠參考DNS解析. 對於PC端上,幾十ms的解析速度來講還好,可是,在手機端上,DNS 解析的效果我就呵呵了. 少則幾百毫秒,多則1s+.
這裏咱們用數聽說話.
手機端頁面加載數和域名分散數的關係. from Mobify Developer

如今,各大瀏覽器都已經提高了資源的下載數,因此,域名分散的必要性也就沒這麼大了. 能夠從上表看出,在2個域名分散條件下,網頁的加載速度提高較大,而第三個之後就比較慢了。 因此, 通常來講,域名分散的數量最好在3如下.apache

那有沒有其餘辦法可以代替DS呢? 事實上有的, 最出名的應該算CDN 和 SPDY.segmentfault

CDN和域名收斂的關係(不要緊)

若是你們使用過雲平臺(阿里雲,騰訊雲)的話,應該有所瞭解過上面的一些服務。 其中比較出名的應該算是CDN服務了.
使用CDN的時候,咱們每每也會使用到CNAME的設置。 那麼問題來了:瀏覽器

CDN 和 domain sharding 到底有什麼關係?服務器

我相信,大部分童鞋,應該都有點懵逼.
in fact, 他們兩個是徹底不同的東西。
CDN 全稱是--Content Delivery Network. 現實意義就是,他其實就是一個 用來保存你靜態文件的倉庫(css,js,img等). 因此,他的出現一定是創建在擁有衆多服務器的雲平臺上. 他的做用就是,託管你的文件,而且當某一個用戶想要獲得這份文件時,便會根據地理位置,找到離用戶最近的一臺服務器(確定須要通過DNS解析), 而後返回 你存儲的靜態文件. 因此,因爲地理位置比較近的緣由,結果就是網速快, 網頁打開的時間也就變短了.
而~ domain sharding 是什麼呢? 其實對比看來,就應該很容易知道, 首先DS(domain sharding) 所提供的服務器地址是不會改變的。 只是增長了 不一樣的subdomain或者domain alias而已. 而這些在CDN 裏面 通通均可以實現.dom

總結一下:

  • DS: 爲了突破瀏覽器對鏈接數的限制,而將資源放到不一樣的domains 上的

  • CDN: 就是將你的資源放到 全國 或者說 全世界各個地方的服務器上的.(固然,他自己也是利用DS的技術)

When should we use CDN?

因爲CDN 比較貴,因此對於小範圍 運營性的H5來講,不使用CDN也沒有太大的影響,反正用戶都在那一塊。 可是,若是你的web 比較大,並且涉及用戶羣體的範圍比較廣的話,相對性的使用CDN 也是有益無害的。不過,因爲CDN 是按瀏覽計費的,因此你懂的。 這裏安利一個Calculator根據你的流量來選擇最佳的CDN. 因此說,你用不用CDN還得看你本身或者你leader的心情了. 另外更詳述的區別能夠見: CDN xx DS

那SPDY又是個什麼東西呢?

SPDY指南

SPDY能夠說是DS殺手. SPDY 的做用就是,在不增長域名的狀況下,解除最大鏈接數的限制. 臥槽~ 怎麼聽起來就像一個 sliver bullet. 沒錯,能夠說SPDY 就是 HTTP2的前身.
SPDY是google主導的一種新型通訊方式.主要的特色就是多路複用. 他的目的就是致力於取消max connections 上限. 不過因爲推廣時間短,全世界使用的網頁數都比較少. 但,據chromium統計,使用了SPDY網頁速率 差很少提高了28%~64%左右. 因此,說SPDY的出現,可讓DS的存在變的毫無價值.
那SPDY具體的優點在哪裏.

  • 解決了HTTP只能 One request per connection. 當鏈接完成後,能夠實現並行下載多個資源文件

  • 服務器推的技術, 和SSE的理念相似,不過更靠底層。直接能夠實現無需用戶等待,直接後臺發資源(感受就像寫APP了,有木有)

  • 請求頭的複用. 當你前幾回的請求頭內容沒多大變化的時候,就會省去幾個相同的,實現Header Compression

  • 數據壓縮: 在HTTP1.1 有 Content-Encoding: gzip, Transfer-Encoding: chunked. 來顯式代表開啓文本壓縮。但在SPDY裏,全部的文本數據默認都會被壓縮.
    SPDY目前的兼容性是IE11+.(因此說仍是任重而道遠)

開啓SPDY

那如何開啓SPDY呢? 很簡單,使用nginx的用戶,能夠下載一個ngx_http_spdy_module的模塊. 使用apache的用戶,能夠下載一個mod_spdy module的模塊.

最後說兩句

其實,DS 和 domain of convergence (域名收斂), 一直都是前端世界的優化的重點。 不過,因爲時代在進步,技術在革新。 感受DS 是頗有可能被淘汰的啊喂. 但,因爲SB-IE佔的全球份額過大,就目前來講,這一天 還太遙遠。 加油~

轉載請註明做者和原文連接: http://www.javashuo.com/article/p-yqnzsthg-w.html

相關文章
相關標籤/搜索