Баг кэширования или нет?

Главные вкладки

Аватар пользователя Azerot Azerot 23 ноября 2009 в 21:14

Ноги растут отсюда. Пытаюсь понять, что происходит:
http://www.drupal.ru/node/37064

Похоже я таки нарыл баг.
Судите сами.
На странице кэширования включен обычный режим кэширования.
Идём в админку, чистим кэш и переключаем сайт в режим Off-line.
Сидим в БД и мониторим таблицу cache_pages. Упаньки, появилась запись о главной странице и о ряде других. Угадайте какой длины? Правильно - одинаковой. Заходим из другого браузера анонимусом - видим сообщение о том, что сайт в off-line.
Теперь идём в админку и переключаем сайт обратно в продуктив.
А вот анонимус как получал Off-line так и получает! И так до тех пор пока либо кэш не протухнет, либо его не почистят! Справедлив и обратный процесс. Если закэширована скажем главная страница, а мы при этом переходим в Off-line, то анонимус получает кэш вместо сообщения о том, что сайт в Off-line!

Вы скажете, что типа - ну и что? Кэшируется как и должно!
Но вопросы:
1. А какого собственно банания создаётся кэш страниц в Off-line режиме, если любому здравомыслящему человеку ясно, что этого не надо делать?
2. Почему кэш выдаётся раньше сообщения об Off-line режиме, ведь опять же с точки зрения здравомыслящего человека такого быть не должно?

Комментарии

Аватар пользователя Vladimir_VVV Vladimir_VVV 24 ноября 2009 в 1:31

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

Аватар пользователя Azerot Azerot 24 ноября 2009 в 8:18

Зачем чистить? Хотя бы НЕ КЭШИРОВАТЬ страницы, если у сайт режим Off-line. Т.е. то что уже было в кэше пусть там остаётся, а новое не добавляется.

Quote:

онечно можно бы было очистить кеш при переходе с офлайн в онлайн и обратно

Так вот и получается СЕЙЧАС, что при выходе в онлайн надо чистить кэш, если вы не хотите, чтобы клиенты вашего сайта любовались заглушкой в течение всего времени, которое у вас задано на устаревание кэша.

Quote:

Wink - мало ли что у вас в заглушки стоит
вот это все и кешируется

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

Аватар пользователя andypost@drupal.org andypost@drupal.org 24 ноября 2009 в 12:53

судя по симптомам, нужно просто чистить кеш страниц при смене режима онлайн-офлайн, стоит поискать такой баг на drupal.org - наверняка он требует внимания!

Аватар пользователя Vladimir_VVV Vladimir_VVV 25 ноября 2009 в 15:09

503 при техобслуживании.
А я считаю, что кеш должен быть кешем, и не очищаться при каждой смене статуса.
Ведь ТО включают либо для проведения каких-то работ, либо для обновления сайта, так вот при обновлении сайта кеш сам очистится, а при проведении работ (реструктуризации сайта) посетителям не обязательно видеть то, что сайт на ТО, они в это время могут почитать необходимые материалы, а по окончанию работ кеш либо обновится по крону либо админ сам обновит.

Аватар пользователя Azerot Azerot 25 ноября 2009 в 15:36

В чём-то правоту такого подхода вижу. Однако, не стоит забывать, что механизм кэширования работает при рабочем Drupal, а сайт может быть в Off-line как раз например по причине обновления или ремонта Drupal и тогда вместо страниц их кэша мы получим уже ошибки веб-сервера, что совсем не гут.

Мне во всём этом непонятно только одно - зачем во время Off-line режима продолжает выполняться занесение новых страниц в кэш? Ведь при установке обычной стандартной заглушки эти страницы одинаковые и статические - зачем их загонять в кэш - какой в этом смысл? А если время протухания кэша например 30 минут, то уже после возвращения сайта в On-line эти 30 минут пользователи будут видеть заглушку, если только админ не почистит этот самый бесполезный кэш.

В общем как должно быть по моему мнению:
1. В Off-line режиме должна выдаваться заглушка. При этом никаких новых добавлений в кэш-таблицы вноситься не должно!
2. Сама страница-заглушка кэшироваться не должна!
3. После возвращения в On-line режим кэш продолжает работать как работал до Off-line без очисток.

Готов выслушать изьяны такой схемы - может я чего не догоняю?

Аватар пользователя andypost@drupal.org andypost@drupal.org 25 ноября 2009 в 18:09

"Azerot" wrote:
Готов выслушать изьяны такой схемы - может я чего не догоняю?

Поясняю, чтобы вывести заглушку - нужно поднять небольшую часть ядра для вывода.
Страница заглушки имеет свой шаблон, и она может быть перекрыта, те для разных url могут существовать разные страницы.
Кеш страниц - одна из таблиц и вывод из кеша всегда будет быстрее, чем обработка.
Так же не стоит забывать об early page cache - это кеш, вывод из которого происходит до соединения с базой и поднятия ядра.