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

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

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

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

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

Ответы [ 4 ]

16 голосов
/ 23 августа 2011

Ответ из двух частей:

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

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

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

Не должно, нет, если он уважает заголовок Cache-Control:

Cache-Control:public, max-age=31536000

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

Например, возможно, для ответа 304 потребуется 200 мс, но если ваш браузер правильно кэширует, для загрузки из кеша будет 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 быстро ответит сбоем, что маловероятно.

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

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

2 голосов
/ 23 августа 2011

Может дать вам 6 953 причины, по которым я все еще разрешаю Google размещать для меня jQuery .

Основные преимущества

  1. Снижение задержки
  2. Увеличенный параллелизм
  3. Лучшее кэширование
1 голос
/ 12 июля 2014

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

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

0 голосов
/ 23 августа 2011

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

...