Как стать автором
Обновить

MVC и кэширование

Время на прочтение2 мин
Количество просмотров3.9K
Наверное многие знают, что такое MVC, если нет, то вам поможет Википедия. Не секрет, что большинство веб-приложений использует именно эту хорошо зарекомендовавшую себя архитектуру.

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

Понятно, что в модели можно производить кэширование промежуточных вычислений, запросов (если
этим не занимается БД), каких-то данных.

А какой из-трех компонентов должен отвечать за кэширование конечного html-кода?

Идеальным случаем кэширования является алгоритм:
1. Проверить актуальная-ли версия в кэше
2. Если да, то вернуть ее
3. Если нет, то получить данные из разных источников
4. Обработать данные
5. Создать и записать html в файл (либо другое хранилище данных) кэша
6. Вернуть конечный html-код

Давайте разберем несколько примеров:
1. Если кэширование осуществляет представление, то браузеру отдается кэшированный код, но модель все равно отрабатывает, потому что ничего об этом не знает.
2. Если кэширование происходит в модели, то получается неразбериха, т.к. модель должна вернуть образно говоря массив данных, а не кусок html-кода.
3. А контроллер, исходя из своей роли, вообще не должен этим заниматься…

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

Как в рамках MVC сделать, чтобы кэшировался конечный код блоков страницы и в модели не выполнялась выборка и обработка данных для этого блока, а для остальных, естественно, выполнялась?

UPD: Основная проблема состоит в необходимости найти неординарные пути кэширования. Это связано с тем, что есть готовый сайт (крупный региональный портал), код которого переписать полностью нет возможности (по множеству причин). Необходимо на уже готовый функционал навесить возможность кэширования. Если бы не MVC, то я это сделал бы это за короткий период времени. Поэтому вопрос уперся в реализацию кэширования именно при архитектуре MVC.

С нетерпением жду ваших советов!
Теги:
Хабы:
+9
Комментарии60

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн