Является ли использование CDN для jQuery (или других статических файлов/сценариев) действительно хорошей идеей?

В нем говорится, что везде использовать CDN, например, Google или Microsoft AJAX CDN, для загрузки статических script библиотек, таких как jQuery в моем случае.

Я не понимаю, как это действительно помогает сделать мой сайт быстрее. В firebug я получаю около 300 мс как для серверов Google и Microsoft AJAX при загрузке jQuery, так и в Chrome, я получаю около 100 мс (dunno, что создает разницу, никаких загрузок не происходит, пробовал и несколько раз, но в любом случае это не так), мой сайт будет иметь среднее время отклика от 30 до 40 мс при развертывании. Как можно загружать файлы, которые CDN делает для моего сайта? Это сделает все еще хуже!

Я понимаю, что когда я посещаю многие сайты, используя, скажем, jQuery из Google CDN, он будет "загружать" script только один раз в течение очень долгого времени, но мой браузер все еще пытается подключиться к серверу Google, и попросите файл script, а затем получите 304 не измененный код состояния. Во время этой круглой поездки 200 мс (в среднем по Chrome и FF) я жду. Но если бы я сам размещал файл script, то он (вниз) загружался MUCH быстрее, примерно пять раз, что является важным фактором для пользовательского опыта. Возможно, 200 мс - это не ОЧЕНЬ БОЛЬШАЯ сделка, но все равно разница, и я хочу знать, почему она рекомендовала использовать CDN вместо того, чтобы размещать файлы сами. В конце концов, после одноразовой загрузки браузер будет кэшировать script для моего сайта, а если я использую CDN, браузер будет запрашивать CDN для script в любом случае, что будет отставать от моего сайта.

Обновление: Я из Турции, и это может быть основной причиной того, что у вас высокие круглые поездки. Большинство моих посетителей будут отсюда, поэтому я прошу, будет ли это полезно для моего сайта, размещенного на серверах в Турции, и пользователей моего сайта, которые также находятся в Турция, использовать CDN. Определенно не хорошо для кругосветных путешествий, но, возможно, я что-то упускаю.

Ответ 1

Ответ на две части:

  • Вы не должны видеть 304s
  • Но это хорошая идея?

Вы не должны видеть 304s

Я понимаю, что когда я посещаю многие сайты, используя, скажем, jQuery из Google CDN, он будет "загружать" script только один раз в течение очень долгого времени, но мой браузер все еще пытается подключиться к серверу Google, и попросите файл script, а затем получите 304 не измененный код состояния.

Он не должен, если он соблюдает заголовок Cache-Control:

Cache-Control:public, max-age=31536000

..., который говорит с даты ресурса, браузер может кэшировать его до года. Нет необходимости в каком-либо HTTP-запросе вообще (и то, что я вижу в Chrome, если я его не принуждаю, никакого запроса вообще, просто примечание, говорящее "из кеша", запустило Firefox и убедило, что Firebug включен для всех страниц, пришел StackOverflow впервые в течение длительного времени с Firefox [который я использую только для тестирования], и, конечно же, он вообще не выдавал никакого запроса на jquery).

Например, может потребоваться 200 мс для ответа 304, но если ваш браузер правильно кэширует, это будет 0 мс для загрузки из кэша.

Полный набор соответствующих заголовков, которые я вижу по принудительному запросу:

Cache-Control:public, max-age=31536000
Date:Wed, 17 Aug 2011 21:56:52 GMT
Expires:Thu, 16 Aug 2012 21:56:52 GMT
Last-Modified:Fri, 01 Apr 2011 21:23:55 GMT

... поэтому моему браузеру не нужно будет запрашивать этот путь еще год.

См. комментарий @Dave Ward ниже: Чтобы получить максимальные результаты кэширования, используйте номер полной версии, например:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<!--                               very specific ---^^^^^                      -->

а не

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
<!--                               very generic ----^                      -->

Хорошо, но это хорошая идея?

Это полностью зависит от вас. Даже с таким отступлением:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script>
<script>
if (typeof jQuery === "undefined") {
    document.write("<scr" + "ipt src='/my/local/jquery.js'></scr" + "ipt>");
}
</script>

... или аналогичный, UX, если CDN опущен, будет ужасным. Браузер будет целыми веками пытаться подключиться к нему. Такой откат поможет только в том случае, если CDN быстро ответит с ошибкой, что маловероятно.

Это означает, что если Google CDN снизится, вам придется быстро настроить то, что вы используете вместо локальной копии. Таким образом, защита от этого становится средством мониторинга (из серверов Google, не переусердствуйте, или они будут недовольны) с откатом на уровне сервера, чтобы начать обслуживать страницы с локальным путем. (Или путь Microsoft по теории о том, что Google и Microsoft, вероятно, не используют базовую технологию CDN, учитывая, насколько хорошо они ладят.)

Для меня наиболее вероятным ответом для большинства сайтов является: "Идем дальше и используем CDN, реагируем, когда и когда CDN для библиотек Google снизится. Оборотная сторона: если вы довольны своей общей загрузкой страницы, загружающей ее с вашего сервера, мало вреда в этом, пока до тех пор, пока трафик не будет достаточно высоким, чтобы вы выглядели каждый последний бит производительности. Но лоты (и много-много) сайтов полагаются на Google CDN, если он снизится, ваш сайт будет далеко не одинок в случае неудачи...

Ответ 3

одно важное замечание о том, почему Firefox не кэширует то, что он должен кэшировать! У FIREBUG есть небольшая функция, называемая "Отключить кеш браузера", разработчики и дизайнеры большую часть времени включают его, и поэтому firefox не кэширует ничего , даже если firebug не активен! поэтому просто откройте "firebug" > перейдите на вкладку "Net" > Right click on tab and unmark it .

Я думаю, что это очень дорогостоящая ошибка в firebug, из-за чего большая часть трафика тратится на бедных разработчиков!

Ответ 4

Дело в том, что, если многие веб-сайты ссылаются на версии на базе CDN, вероятность того, что пользователи, приходящие на ваш сайт, уже имеют script в своем кеше.