LINUX.ORG.RU

Кэшировани. Теория


0

0

Предистория. У меня есть собственный "мини-фреймворк" для новостных сайтов. Он поддерживает кэширование всех страниц сайта (и новостей, и списков новостей по разделам), кэш хранится в html-файле, обновляется по факту обновления новости или создается, если отсутствует (обработка 404 страницы).

Рассматривая подобные решения, вижу, что в основном кэшируют данные на некоторое время, а потом кэш генерируется заново.

Собственно вопрос в том, чем плохой "мой" способ: ведь есть данные, которые могут изменяться очень редко, а перегенерация кэша (т.е. "расходы" на доступ к БД и т.д.) для них будет осуществляться постоянно.

anonymous

ответ: твой фреймворк не универсален - этим в определенных ситуациях и плох! ;)
карочи: если тебя устраивает скорость/возможности, то не заморачивайся!
лучшее враг хорошего! ;)

Ant0
()

Кешируй на уровне контроллера, если данные динамические. Посмотри как это делается в других фреймворках.

HappyCoder
()
Ответ на: комментарий от Ant0

>твой фреймворк не универсален - этим в определенных ситуациях и плох! ;)

Ну универсальный фреймворк будет использовать больше ресурсов, чем заточенный под задачу. Но интересует, почему в основном (тот же Django например) кэшируют _на некоторое время_, а не обновляют кэш _по факту изменения материала_. В некоторых случаях имхо это "дешевле" (даже несмотря на трудности отслеживания момента изменения).

anonymous
()
Ответ на: комментарий от HappyCoder

>Кешируй на уровне контроллера, если данные динамические. Посмотри как это делается в других фреймворках.

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

anonymous
()
Ответ на: комментарий от Eshkin_kot

>потому что imho нет универсального способа определить что данные изменились.

Универсального нет, конечно. Но частный - товар в каталоге, новость в ленте и т.д. - довольно просто. По экономии ресурсов будет ли обновление кэша по факту изменения данных лучше (в этих частных случаях) лучше, чем кэширование "на время"?

anonymous
()
Ответ на: комментарий от Eshkin_kot

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

Teak ★★★★★
()
Ответ на: комментарий от anonymous

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

Teak ★★★★★
()
Ответ на: комментарий от Teak

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

Да, вы правы.

Собственно (как я уже спрашивал) хотелось бы знать, 0)как будет с ресурсоэкономией (сравнивая с "временным" кэшем) и 1)почему такого кэширования (по факту изменения) не делают во фреймворках (ну, точнее, я не встречал:) ): только в связи со сложностью реализации связи между закэшированными страницами в общем случае?

anonymous
()
Ответ на: комментарий от anonymous

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

Teak ★★★★★
()
Ответ на: комментарий от Teak

>Это не столько сложно, сколько требует от юзера, чтобы он подумал, прежде чем включать кэш.

Ну если дело только в этом, то буду продолжать использовать. Я-то думал, какие-то принципиальные проблемы могут быть. Спасибо всем.

anonymous
()
Ответ на: комментарий от anonymous

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

Teak ★★★★★
()
Ответ на: комментарий от anonymous

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

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.