Ответ 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, если он снизится, ваш сайт будет далеко не одинок в случае неудачи...