Forum Webscript.Ru
Программирование => PHP => Тема начата: dub от 26 Января 2006, 23:54:51
-
CMS на PHP+MySQL. Подскажите, пожалуйста, в каком направлении копать в вопросе кэширования.
Заранее благодарен за любую информацию.
-
во-первых - при чём здесь CMS?
а если бы это был форум - то что, приципы кэширования отличались бы?
во-вторых, какое именно кэширование ты имеешь в виду? На уровне страниц или НТТР запросов?
-
Пользователь №1 посылает апачу HTTP-запрос на получение динамического документа. Апач передает запрос на обработку PHP, PHP лопатит базу, возвращает страницу апачу, апач - пользователю.
Пользователь №2 посылает апачу запрос на получение того же документа. Хотелось бы в этом случае знизить нагрузку на PHP и MySQL.
Это какое кэширование? На каком уровне?
Что касается принципов кэширования для форума. По идее, принципы должны отличаться в зависимости от степени персонификации контента.
-
dub:
Это какое кэширование? На каком уровне?
не увидел в описанной схеме никакого кэширования.
только пожелание.
кэширование может быть на уровне запроса - если документ не менялся, то послать 304 Not Modified
а может быть на уровне страницы - просто отдаётся закэшированная страница.
dub:
По идее, принципы должны отличаться в зависимости от степени персонификации контента.
а чем отличается персонификация от любых других параметров запроса страниц?
слушай, а оно тебе вообще нужно - это кэширование?
-
Нужно. Если бы я абсолютно точно представлял себе суть вопроса, то, скорее всего, не обращался бы за помощью.
В общем-то ты прав. Пока, действительно, только пожелание.
Собственно, мне нужно нащупать направление реализации. И, собственно, ты хоть и бурчишь, а уже начинаешь мне помогать.
-
ну, щупай-щупай...
-
Насколько я понимаю, делается примерно так.
Когда динамически создаваемый документ запрашивается впервые, он таки генерируется из базы, а результат - конечный код документа - не только отдается посетителю, но и сохраняется в базе, в отдельной таблице с дополнительными полями, содержащими дату изменения и относительный адрес документа.
Когда документ запрашивается в следующий раз, первым делом обрабатывается $_SERVER (http://ua2.php.net/manual/en/reserved.variables.php#reserved.variables.server)["HTTP_CACHE_CONTROL"] в соответствии с RFC 2616 (http://www.faqs.org/rfcs/rfc2616.html), Section 14.9, чтобы определить, есть ли у браузера кэшированная копия документа, и насколько она стара.
Если копия у браузера есть и она моложе даты последнего обновления - то возвращается header (http://www.php.net/manual/en/function.header.php)("HTTP/1.0 304 Not Modified").
Если копии нет или она устарела, выдается кэшированный код документа из кэш-таблицы.
При изменении документа, для которого в кэше уже есть копия, копия заменяется, дата обновляется. Если копии в кэше нет - то можно ничего не делать, пока документ не будет запрошен впервые (а вдруг он никому не нужен?).
Типа того?
-
dub:
но и сохраняется в базе, в отдельной таблице с дополнительными полями,
ROTFLMAO!!!
нет, кэширование тебе, всё-таки, не нужно =))))
-
dub
1. HTTP
Чтобы использовать кеширование на уровне HTTP надо сначало при первой выдаче документа посылать правильные заголовки. Например Cache-Control, ETag и Expires (подробности в RFC + была книга о кешировании от орейли)
Чтобы узнать есть кеш и какой он давности - If-Match / If-modified-since
2. Кеширование на стороне сервера обычно делается не в базе, а в файлах (или в memcache-е если можешь себе это позволить).
-
RomikChef
Насколько я понимаю, твоя гиперэмоциональная реакция связана с тем, что результат лучше сохранять в файле. Возникло у меня сегодня с утра сомнение по этому поводу, решил сначала почитать еще, а потом уже продолжить обсуждение.
Макс
Спасибо. Буду копать. Если возникнут более точные вопросы - задам.
-
моя гиперэмоциональная реакция связана с убеждением, что кэширование тебе не нужно.
-
RomikChef
Нет, ты таки умеешь создать обстановку бесконечной доброжелательности.
Повторюсь, я ведь не скрываю, что обратился за помощью. И - вот так неожиданность - именно в той области, где у меня пробелы. Если тебе лично жаль делиться своим драгоценным опытом, полученным в результате усилий, важность которых я ни в коем случае не пытаюсь умалить, только для того, чтобы сократить мне путь, так ведь я и не заставляю тебя это делать. Не помогай. Но и не надо пытаться меня обламывать. Я все равно разберусь - раньше или позже. Да и тебе вроде смысла в этом нет никакого. Разве только ты получаешь от этого какое-то неведомое мне удовольствие.
Так что есть предложение не переходить на перебранку. Если есть что возразить или добавить по существу вопроса (кроме "существо вопроса тебе не нужно") - буду рад.
-
Удовольствие я получаю всегда только одно.
Когда вопрос, на который я отвечаю, имеет смысл. СМЫСЛ. Не высосан из пальца "а хорошо бы построить мост - отсюда, и до самой Москвы...", а основан на конкретной задаче, причём автор хорошо себе её представляет.
В данном случае мы имеем маниловщину.
то есть, автор мало того ,что тратит своё время - так ещё и на чужое зарится, задавая бессмысленные вопросы на форуме.
Впрочем, 90% вопросов на форумах именно такие. Поскольку имея минимальный уровень интеллекта, на любой вопрос пожно найти ответ самостоятельно
-
RomikChef:
на любой вопрос пожно найти ответ самостоятельно
Согласен абсолютно. В моем представлении назначение форума в частности состоит в том, чтобы более опытный мог - по собственной воле, заметь - сузить область поиска менее опытному.
В данном случае начальная область моего поиска настолько широка, что вызывает у тебя раздражение. Что ж, буду работать над ее сужением. Надеюсь, степень осмысленности вопросов также будет расти.
В общем, спасибо в любом случае.
-
как ты уходишь от основного вопроса - уж на сковородке позавидовал бы