Кеширование. Инвалидация сигналами. Десерт
Всегда приятно видеть отзыв на своё творение. А особенно, когда он исходит от очень уважаемого мною человека - Ивана Сагалаева. Спасибо. В своём посте он высказал несколько очень точных замечаний по теме моего поста об инвалидации кеша сигналами. Изложу своё видение тезисов Ивана.
Декларативность действительно была моей целью. Поскольку джанга сама в очень многих местах декларативна, то конечно хотелось инструмент выдержанный в том же стиле, но не теряющий от этого функциональности.
Ситуация с многоэтажными декораторами меня тоже напрягает, и сейчас например файл, где хранятся шаблонные теги для этого блога, напоминает действительно urls.py в случае массового использования generic views.
Решение одно - разделить функционал и мета информацию инвалидации. Т.е. грубо говоря принудительно применять декоратор в старом синтаксисе “функция=декоратор(функция)”. Тут то как раз и идея с одним “инвалидационным” файл пригодится.
В конце концов, моя реализация лишь proof of concept
идеи сигнальной инвалидации. Как мне кажется, вот этот самый “proof” получился. Оно работает! Понятно, что в отдельных конкретных проектах, она может оказаться неудобной или не очень полезной. Но тут каждый сам волен обтесать её под свои нужды и условия.
Я использовал в качестве примера стандартные сигналы джанги только ради простоты. Конечно можно и нужно использовать свои сигналы, которые ближе к логике конкретных приложений.
Да, а что если подойти к идеи инвалидации сигналами немного с другой стороны. Я изначально рассматривал интеграцию данного механизма уже в существующую систему сигналов. Но ведь, можно и наоборот - систему сигналов подстроить под инвалидацию. Т.е. завести специальные сигналы для кеша и распределить их инициирование в нужных местах кода.
В таком случае можно вообще очень тонко отслеживать процесс инвалидации. Если доводить идею почти до абсурда, то и махинации с суффиксами не нужны будут в принципе, поскольку можно для каждой функции(и шаблонного тега) обернутой в декоратор заводить отдельный сигнал. Это кстати путь развития моей реализации, который очень хочется попробовать.
Вот так вот:)
P.S.: Так же, Иван, спасибо за неравный бой с Akismet;)
P.P.S.: bw, твой сервер почты наотрез отказывается принимать письма от меня:(
P.P.P.S.: уже выезжаю в Киев!:)