用CDN的七個理由
- 瀏覽器從服務器上下載css、js和圖片等文件時都要和服務器連接,而大部分瀏覽器對同一個域名用於下載文件的並發連接數限制在4個,這意味着如果要下載第五個文件就必須等前四個文件中有一個已經加載完成,假如前4個文件都很大,第五個文件就要等很久,整個網頁的加載速度就受限於此了。用CDN就可以通過不同的域名來加載文件,從而使下載文件的並發連接數大大增加。
- jQuery一類的庫文件現在被廣泛使用,如果訪問你網站的用戶的瀏覽器之前在訪問別的網站時通過和你相同的CDN已經加載了jQuery,由於jQuery文件已經被緩存了,就不用重新下載了。
- 也許你的網站主機性能很好,但是應該不會比Google、Microsoft和Yahoo等大公司的容量和可擴展性更高,他們提供的CDN具有更好的可用性,更低的網絡延遲和丟包率。
- CDN能提供本地的數據中心,這樣一來,那些遠離你網站主服務器的用戶也能就近很快地下載文件。
- 讓你能夠連接到特定版本的css文件或者js庫文件,可以根據需求請求最新的版本。
- 很多商業付費的CDN能提供使用報告,這可以作為你自己網站分析報告的補充。
- CDN能夠分配負載,節省帶寬,提高你網站的性能,降低你網站托管的成本,通常是免費的。
不用CDN的七個理由
- 在開發階段如果處在斷網環境下,CDN文件是無法加載的。
- 一些免費CDN提供的文件可能是功能完整的包或者庫文件, 可能超過幾百kb的大小,而許多時候網站只需要使用其中部分,你可以使用自己優化過、更小的css和js文件,讓用戶下載和執行的更快,當然你可以把自己的文件放到私人的CDN上,但這會需要額外的工作量和花費。
- 盡管一些流行的CDN文件事先緩存過的幾率較大,但並不是一定的,一些移動設備的緩存可能很小而且效率很低,CDN的優勢就不明顯了,特別是當你可以在本地服務器上存放比CDN文件更小的文件時。
- 由於地理、法律、政策和商業上的阻隔,你所在的地區可能屏蔽了一些流行的免費CDN服務的域名或者IP地址。
- CDN會有出故障的時候,這時候要有備用方案,也就是你的本地文件,這種處於穩定考慮的冗余會增大開發工作量和復雜度。
- 如果安全性對你的網站很重要,就不要使用公共的CDN,因為當你遠程從CDN請求文件時,你的訪問來源信息也被發送過去,一些遠程的js文件可能被修改用來搜集你的用戶或者系統信息,而當你使用https協議時,能選擇的CDN就更加有限。
- 當你把文件控制交給Google、微軟、亞馬遜或者其他大的互聯網公司時,你會考慮他們對你信息的搜集整理嗎,這也許是多慮了,但是在互聯網這一行里多一點這樣的懷疑並不壞。
你到底要不要用CDN呢
-
幾種明確不該用CDN的情況:
- 你構建的是內部網絡應用,不與外部Internet連接;
- 像銀行系統這樣的應用,安全和隱私是最優先考慮的,就要讓所有源文件和服務器位置完全處於自己掌控中;
- 你為公司或者國家開發的應用,而他們恰好對某些CDN的域名或者IP地址限制訪問。
-
CDN對低流量的小網站性能提升並不明顯,如果沒有需要高帶寬的視頻、音頻文件,把你的文件放在一起可能還更簡單。
-
對流量高的網站,CDN可以大大提升性能,但假如你的用戶以移動設備為主,可能自己優化過的小文件比CDN上的大文件要下載和執行的更快。
-
在實際中通過JavaScript搜集用戶分別使用CDN文件和本地服務器文件時加載頁面的速度,以決定一段時間內是選擇CDN還是本地文件。
-
對於重要的文件,最好還是提供本地文件的冗余,以應對CDN文件不可用的情況。以jquery為例:
<script src="https://ajax.googleapis.com/ajax/libs/jquery1.4.3/jquery.min.js"></script> <script>!window.jQuery && document.write("<script src=\"scripts/jquery-1.4.3.min.js\">" + "<\/scrript>")
這里通過判斷window.jquery全局對象是否存在來判斷jQuery是否通過CDN加載成功,不成功就通過
document.write
方法來加載本地的jQuery文件,注意這里用到了轉義字符‘\’避免瀏覽器將document.write
方法內的“</script>
”當成了結束標簽。 - 一些對系統並不是至關重要的文件諸如字體文件、css重置、js小插件、背景圖片等可能適合使用CDN,因為即使CDN文件不可用,網站也能做到平穩退化。
總結
看到這里,我想你也覺得CDN是好的,只是要把它用好,還是應該遵循前面講到的一些原則,簡單的說,在實踐中,一些流行的庫文件和字體文件使用CDN是好的,對於大型網站來說,使用私有CDN也能極大提升速度和降低成本,但如果你的應用對安全、隱私和可靠性要求較高,那就要在CDN的性能提升和安全考量之間做一下權衡了。