С SPDY push, есть ли смысл в заголовках с истекшим сроком давности?
Насколько я понимаю, в SPDY push сервер обслуживает документ HTML, просматривает его перед отправкой и решает, что мне нужны ресурсы images/css X Y и Z, поэтому отправляет их также.
Как он знает, чтобы не беспокоить, если они уже кешируются моим браузером? Или нет смысла пытаться кэшировать статические ресурсы, если ваши клиенты используют браузеры spdy/3?
(Очевидно, не каждый клиент будет, но я заинтересован в этом случае)
2 ответа
Согласно ресурсам на сайте разработчика Chromium, это один из недостатков. Сервер не может знать, есть ли у клиента ресурс, поэтому это может быть потрачена впустую.
Источник: http://www.chromium.org/spdy/link-headers-and-server-hint
Если вам действительно нужно оптимизировать время загрузки первой страницы:
- Сгенерируйте сигнатуру (подстроку хеша md5/sha) всех ваших статических файлов начальной загрузки, необходимых при первой загрузке страницы. Обычно это только базовые css + js для начальной загрузки. С этого момента обычно js загружает данные (особенно из приложений, насыщенных клиентом, поэтому вам не понадобится загрузка сервера, и клиенты будут использовать кеш соответствующим образом)
- Установите длительный cookie-файл "bootstrap-version" для подписи версии начальной загрузки.
Когда клиент запрашивает страницу:
- если файл cookie начальной загрузки не обновлен или отсутствует, инициируйте отправку на сервер файлов начальной загрузки.
- В противном случае предположим, что клиент кэшировал их (возможно, нет, что приведет к небольшой регрессии, но в 99% случаев это произойдет)
Таким образом, вы достигнете очень высокой эффективности, и загрузка первой страницы будет выглядеть как повторное посещение с кешем из-за загрузки сервера.
Реализации Go и Node Spdy позволяют вам играть на сервере. Модули AFAIK nginx/apache пока не имеют этой функции. Я надеюсь, что они скоро добавят это на основе предоставленных приложением заголовков или подобного.