Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Кэширование статичных объектов
Форумы портала PHP.SU » » Вопросы новичков » Кэширование статичных объектов

Страниц (2): [1] 2 »
 

1. Tox - 15 Августа, 2012 - 14:00:52 - перейти к сообщению
В сети везде советуют делать это через nginx, а я хочу научиться без всяких плюшек.
На мысль подтолкнуло это, там есть полезные расширения для браузера, которые анализируют указанные странички ну и советуют, соответственно, что надо сделать, чтобы работало быстрее.
Мне было предложено кэшировать статические элементы, такие, как css, js, img. Я прочел еще это, картина прояснилась,но остались некоторые вопросы.
То есть для странички, которая обновляется по понедельникам, можно спокойно указать
PHP:
скопировать код в буфер обмена
  1. $dt_tmp=getdate(date("U"));
  2. header("Expires: " . gmdate("D, d M Y H:i:s",
  3.         date("U")-(86400*($dt_tmp["wday"]-8))) . " GMT");
  4. header("Cache-control: public");


А если каждый месяц, то так:
PHP:
скопировать код в буфер обмена
  1. header("Expires: " . gmdate("D, d M Y H:i:s",
  2.         date("U")-(86400*($dt_tmp["mon"]-13))) . " GMT");

?

Непонятно также, как кэшировать css, js и картинки. На гугл девелоперс предлагается присваивать “отпечатки” по URL, например, так. Это все хорошо, но в папке-то лежит css.css, а не 82b6bc440914c01297b99b4bca641a5d css.css. Или при каждом изменении css надо прописывать “128-bit hexadecimal number”? И опять же, header используется до первого вывода, как мы отошлем заголовок, если нам надо прочесть “отпечаток”? Как-то не совсем понятно.
Есть какие идеи, как это можно реализовать? Или есть механизм получше? Ну уж точно не по md5 Улыбка
2. KingStar - 15 Августа, 2012 - 14:31:16 - перейти к сообщению
ИМХО полезные расширения для браузера о которых ты говоришь не у каждого будет установлено, и браузеров и их версий также несметное количество, если уж ты так заботишься об пользователе и скорости загрузки странички в его браузере, то лучше делай со всякими плюшками, тем более что ты сам заметил, что их везде советуют
3. Stierus - 15 Августа, 2012 - 14:33:52 - перейти к сообщению
То, что вы описали ниже - это кеширование на стороне клиента.
Цитата:
Непонятно также, как кэшировать css, js и картинки.
Вы не поверите, но ненавистным вам nginx - выставляйте те же заголовки expires

Если у вас четкое расписание обновлений - настройте nginx на отдачу этих заголовков и все, если вам нужно статику кешировать, но при этом вы не знаете, когда она будет меняться - делайте версионность (main.css теперь выглядит как main.css/v2). Для этого урла у вас будет expires и кэширование на стороне браузера, как только у вас новая версия - вы в своем приложении урлы main.css/v2 заменяете на main.css/v3
4. Tox - 15 Августа, 2012 - 14:34:16 - перейти к сообщению
KingStar
не о расширениях для браузера речь. Совершенно нормальная тема - кэшировать статичные элементы. Вопрос в том, как.
5. DeepVarvar - 15 Августа, 2012 - 15:12:32 - перейти к сообщению
Уже же разжевали как.
6. Tox - 15 Августа, 2012 - 15:35:46 - перейти к сообщению
Stierus
то есть другого метода нет. надо садится за nginx?
7. Stierus - 15 Августа, 2012 - 15:45:16 - перейти к сообщению
вы как-то иначе сможете выставлять заголовки отдаваемым по http файлам?
8. DlTA - 15 Августа, 2012 - 15:57:42 - перейти к сообщению
непонятная проблема,
все статические файлы при отдаче сервером имеют в заголовке дату последней моидфикации, при повторном опросе браузер автоматом указывает от какой даты файлы он уже имеет в кеше, если по датам обновления не проходило, то сервак кидает 300 какую то там, что мол содержимое не изменилось. что еще надо?
9. DeepVarvar - 15 Августа, 2012 - 16:06:02 - перейти к сообщению
DlTA пишет:
при повторном опросе браузер автоматом указывает от какой даты файлы он уже имеет в кеше, если по датам обновления не проходило, то сервак кидает 300 какую то там
При повторном опросе браузер даже не опрашивает сервер, а сразу берет из кеша. Сервер отдает заголовки группы Modified/Expires/Date в зависимости от ситуации. Сервер никогда не может отдавать только заголовок при наличии файла по запрошенному пути, он отдает файл всегда, если тот был запрошен.
Заголовки несут чисто информативный характер. Браузер при первичном запросе файла анализирует заголовки и принимает решение кешировать или нет.
При повторном обращении браузер не запрашивает закешированные файлы, если не указано иное в принятых ранее заголовках.
10. DlTA - 15 Августа, 2012 - 16:12:55 - перейти к сообщению
DeepVarvar пишет:
При повторном опросе браузер даже не опрашивает сервер, а сразу берет из кеша
это при условии что при первом запросе указано как долго этот файл не будет модифицирован
11. DeepVarvar - 15 Августа, 2012 - 16:15:57 - перейти к сообщению
DeepVarvar пишет:
если не указано иное в принятых ранее заголовках

(Добавление)
DlTA пишет:
при первом запросе указано как долго этот файл не будет модифицирован
Нельзя так указать. Можно указать время устаревания файла (Expires).
А вот как долго он будет не модифицирова - неизвестно никому.
Заголовок о модификации приедет только тогда когда изменится время последнего изменения файла (Last Modified).
12. DlTA - 15 Августа, 2012 - 17:28:13 - перейти к сообщению
DeepVarvar пишет:
Нельзя так указать. Можно указать время устаревания файла (Expires).
А вот как долго он будет не модифицирова - неизвестно никому.
Заголовок о модификации приедет только тогда когда изменится время последнего изменения файла (Last Modified).
не лбом так полбу
13. DeepVarvar - 15 Августа, 2012 - 19:11:37 - перейти к сообщению
DlTA пишет:
не лбом так полбу

Таки нет. Если Экспирес просрочил, то браузер пойдет за файлом, даже если тот на сервере не изменялся.
А если файл на сервере изменился, а экспирес еще не просрочил, то браузер за файлом не пойдет.
14. DlTA - 16 Августа, 2012 - 00:29:12 - перейти к сообщению
DeepVarvar пишет:
Если Экспирес просрочил, то браузер пойдет за файлом, даже если тот на сервере не изменялся
откуда сервер знает когда пройдет срок годности для статичных файлов?
имеется только дата модификации, которой и оперируют.
15. DeepVarvar - 16 Августа, 2012 - 12:49:36 - перейти к сообщению
DlTA пишет:
откуда сервер знает когда пройдет срок годности для статичных файлов?
Сервер не знает, ему всеравно, а вот браузер знает, ему же заголовки отправлялись в предыдущий раз.

 

Powered by ExBB FM 1.0 RC1