2011-06-03 53 views
6

我聽說過所有的情況都贊成使用像Google APIs這樣的CDN來爲我的web應用程序託管JavaScript庫,比如JQuery和Prototype。速度更快,節省帶寬,允許並行加載腳本等等。但我最近在Douglas Crockford的json2.js腳本中發現了以下評論:有沒有不使用公共CDN來加載Javascript庫的好處?

使用您自己的副本。這是非常明智的負載代碼從你不控制的服務器。

我很好奇他的論點可能在這個斷言背後,以及它是否專門針對Google等公共CDN用戶或其他內容?

+3

谷歌下降。 jQuery打破了一半的網絡。最好的一天。越是單一的失敗點,你越有可能失敗。 – Raynos 2011-06-03 15:10:55

+0

使用類似Google API的CDN和來自不可靠來源的CDN存在主要區別。例如,該JavaScript的主機可以在任何時候更改腳本的內容,以開始將惡意軟件傳播到您的網站用戶。當然,這種事情不會(希望)會發生在更可靠和可靠的服務上,例如Google API。另外,如果由於某種原因遠程託管的腳本不可用,它可能會破壞您網站上的全部功能。你需要小心你從哪裏鏈接你的腳本。 – Niklas 2011-06-03 15:14:05

回答

10

假設他在談論專業的主機像谷歌的CDN,那麼最好的辦法是這樣做:

<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if necessary --> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script> 
<script>window.jQuery || document.write("<script src='js/libs/jquery-1.5.1.min.js'>\x3C/script>")</script> 

(從http://html5boilerplate.com/拍攝)

這樣一來,你的所有好處,而如果Google的CDN崩潰,您的網站可能會崩潰。

但是,他說:

使用自己的COPY。這是非常 不明智的代碼加載從服務器上,您 不控制。

其實我不認爲他在談論的CDN。我想他只是說「不要隨意鏈接隨機網站的腳本」。

你不想這樣做,因爲該網站可能會改變腳本所在的位置,甚至更改腳本。 CDN永遠不會這樣做。

+0

回退是一個很好的技術,但只能保護您使用的服務器在你的控制的危險之一。您仍然可能獲得服務受損或損壞的腳本。 – jball 2011-06-03 15:18:39

0

原因是,如果你依賴的服務器出現故障,而你的服務器沒有。您網站的體驗受到影響。有許多方法可以實現回退,所以如果jquery或其他腳本無法加載,那麼您可以使用您託管的副本作爲備份。

另一次不應該使用它的是Intranet應用場景,其中帶寬通常不是問題。

創建喬恩加洛韋回退的一種方式:http://weblogs.asp.net/jgalloway/archive/2010/01/21/using-cdn-hosted-jquery-with-a-local-fall-back-copy.aspx

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js"></script> 
<script type="text/javascript"> 
if (typeof jQuery == 'undefined') 
{ 
    document.write(unescape("%3Cscript src='/Scripts/jquery-1.3.2.min.js' type='text/javascript'%3E%3C/script%3E")); 
} 
</script> 
0

如果公共服務器的JS被攻破(可用性,安全性或缺陷明智的),那麼您的網站訪問者將受到影響,並有可能怪你。另一方面,Google的CDN因小型公司服務器的機會而受到損害的可能性有多大?當您在本地託管時,您也會失去CDN爲您提供的所有緩存優勢。

0

雖然其中一些其他答案肯定是有效的,但我們有一個稍微不同/其他原因。

我們有一個過程,根據第一個請求確定評估哪個靜態內容是任何給定頁面所需的。在後臺,將這個靜態內容(js,css)合併並縮小爲一個文件(1代表JS,1代表CSS),然後所有將來的請求都將使用單個文件而不是多個文件。

雖然我們可以從理論上說,排除可能在CDN提供服務,並使用CDN這些文件,它其實更容易(因爲我們會居然要添加代碼來處理例外),並在某些情況下,比使用CDN更快。

0

jQuery是開源的。如果你對內部進行了修改,那麼顯然你不能託管他人的服務器。一般而言,託管其他人的腳本是一種安全風險;他們可以在不告訴你的情況下改變腳本,現在你將它鏈接到你的頁面上。

這是一個信任的問題;你相信無論CDN是否安全,不要在你想要的腳本的位置放置惡意腳本?

2

基本上,這是一個信任問題。您需要相信主機不會更改託管文件中的任何內容,並且您需要信任文件的可用性。你能確定URL不會改變嗎?您對服務器的任何停機時間導致應用程序停機的事實感到滿意嗎?

0

除了所有其他答案:

你要擔心從不同的來源在直基於SSL的HTTP(HTTPS即),但你的JS服務頁面。瀏覽者可以抱怨(有時以驚人的方式)關於有擔保和無擔保物品。

此外,人無腳本擴展(或類似)瀏覽需要讓JS從多個不同來源的運行。沒有那麼大,如果你使用的是大CDN(因爲很可能他們會已經允許它在過去的某個時間),但是你需要擔心他們只允許你的一些JS的交易。

+0

我以前肯定遇到過這個煩人的SSL問題。幸運的是,Google現在在他們的CDN上使用https。 – Jonathan 2011-06-03 15:29:52

+0

我見過的所有公共CDN(bootcdn.cn除外)都支持https。 – sgoblin 2015-06-06 02:35:52

相關問題