Есть ли преимущество в том, чтобы НЕ использовать публичный CDN для загрузки библиотек Javascript? - PullRequest
6 голосов
/ 03 июня 2011

Я слышал все случаи в пользу использования CDN, например API Google , для размещения библиотек JavaScript, таких как JQuery и Prototype, для моего веб-приложения. Это быстрее, экономит полосу пропускания, разрешает параллельную загрузку скриптов и так далее. Но недавно я наткнулся на следующий комментарий в сценарии Дугласа Крокфорда json2.js :

ИСПОЛЬЗУЙТЕ СВОЮ КОПИЮ. ЧРЕЗВЫЧАЙНО НЕ ПОЛУЧИТЕ КОД ЗАГРУЗКИ С СЕРВЕРОВ, ВЫ НЕ УПРАВЛЯЕТЕ.

Мне любопытно, что его аргумент может скрывать за этим утверждением и предназначен ли он специально для пользователей общедоступных CDN, таких как Google, или что-то еще?

Ответы [ 7 ]

10 голосов
/ 03 июня 2011

Если он говорит о CDN профессионального уровня, таких как Google, то лучше всего сделать следующее:

<!-- 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/)

Таким образом, вы получите всепреимущества, без риска того, что ваш сайт сломается, если CDN Google выйдет из строя.

Но он сказал:

ИСПОЛЬЗУЙТЕ СВОЮ СОБСТВЕННУЮ КОПИЮ. ЭТО ЧРЕЗВЫЧАЙНО НЕВОЗМОЖНО ЗАГРУЗИТЬ КОД С СЕРВЕРОВ ВАМИНЕ КОНТРОЛИРУЙТЕ.

На самом деле я не думаю, что он говорит о CDN. Я думаю, что он просто говорит: «Не делайте горячие ссылки со случайных сайтов».

Вы бы не сталиЯ хочу сделать это, потому что веб-сайт может изменить местоположение скрипта или даже изменить скрипт . CDN никогда не сделает этого.

2 голосов
/ 03 июня 2011

По сути, это вопрос доверия.Вы должны доверять хосту, чтобы ничего не менять в размещенном файле, и вы должны доверять доступности файла.Можете ли вы быть абсолютно уверены, что URL не изменится?Вас устраивает тот факт, что любое время простоя их серверов приводит к простою вашего приложения?

0 голосов
/ 03 июня 2011

В дополнение ко всем остальным ответам:

Вы хотите беспокоиться о том, чтобы обслуживать свои страницы по протоколу SSL (например, https), а ваш JS - по прямому http из другого источника. Браузеры могут жаловаться (иногда тревожным образом) на защищенные и незащищенные объекты.

Кроме того, люди, просматривающие с расширением noscript (или похожим), должны разрешить запуск JS из нескольких разных источников. Не так уж и много, если вы используете основной CDN (скорее всего, они позволят это в какой-то момент в прошлом), но вам нужно беспокоиться, что они допускают только НЕКОТОРЫЕ из ваших JS.

0 голосов
/ 03 июня 2011

jQuery с открытым исходным кодом. Если вы внесли изменения во внутренние системы, то, очевидно, вы не сможете разместить сервер другого человека. В целом, размещение сценариев других людей представляет собой угрозу безопасности; они могли бы изменить сценарий, даже не сказав вам, и теперь вы связываете его со своими страницами.

Это вопрос доверия; Вы уверены, что любой CDN будет защищен, чтобы не размещать вредоносный скрипт в том месте, где вы хотите?

0 голосов
/ 03 июня 2011

Хотя некоторые из этих ответов, безусловно, верны, у нас есть несколько другая / дополнительная причина.

У нас есть процесс, который по первому запросу определяет, какое статическое содержимое требуется для любой данной страницы. В фоновом режиме этот статический контент (js, css) объединяется и минимизируется в один файл (1 для JS, 1 для CSS), а затем все будущие запросы обслуживаются одним файлом, а не несколькими.

Хотя теоретически мы можем исключить файлы, которые могут обслуживаться в CDN, и использовать CDN для них, на самом деле это проще (поскольку нам действительно нужно добавить код для обработки исключений) и в в некоторых случаях быстрее, чем при использовании CDN.

0 голосов
/ 03 июня 2011

Если js публичного сервера будет скомпрометирован (доступность, безопасность или ошибки), это повлияет на посетителей вашего сайта и, вероятно, обвинит вас.С другой стороны, каковы шансы того, что CDN Google будет скомпрометирован по сравнению с шансами сервера какой-нибудь более мелкой компании?Вы также теряете все преимущества кэширования, которые дает вам CDN при локальном размещении.

0 голосов
/ 03 июня 2011

Причина в том, что если сервер, от которого вы зависите, выходит из строя, а ваш - нет. Опыт вашего сайта страдает. Существуют способы создать запасной вариант, поэтому, если jquery или какой-либо другой скрипт не загружается, вы можете использовать копию, размещенную на вашем хосте, в качестве резервной копии.

В другой раз вы не должны использовать его в сценарии приложения интрасети, где пропускная способность обычно не является проблемой.

Способ создания запасного варианта от Джона Галлоуэя: 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>
...