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

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

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

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

Далее можно поставить вопрос о конкурентных обращениях к хранилищу виджетов. Файловая реализация без проблем выдержит много читателей и одного писателя, но вот как быть если вдруг появятся несколько одновременных писателей? БД без проблем решает эту задачу. Использование бд для виджетов - это дополнительная нагрузка и потеря производительности. Либо использовать файловый вариант, но со специальным запиранием на изменение? Вообще же говоря виджеты сами по себе меняются не часто - для хранилища число и параметры виджетов будут практически всегда стабильными. Конкуренция может появится уже при работе с конечным контентом, его кэшированием, объявление контента устаревшим.

Вот такие не простые вопросы сейчас стоят при переработке модели виджетов.