Александр Кошелев
Александр Кошелев Python-разработчик

Кеширование. Инвалидация сигналами. Десерт

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

Декларативность действительно была моей целью. Поскольку джанга сама в очень многих местах декларативна, то конечно хотелось инструмент выдержанный в том же стиле, но не теряющий от этого функциональности.

Ситуация с многоэтажными декораторами меня тоже напрягает, и сейчас например файл, где хранятся шаблонные теги для этого блога, напоминает действительно urls.py в случае массового использования generic views.

Решение одно - разделить функционал и мета информацию инвалидации. Т.е. грубо говоря принудительно применять декоратор в старом синтаксисе “функция=декоратор(функция)”. Тут то как раз и идея с одним “инвалидационным” файл пригодится.

В конце концов, моя реализация лишь proof of concept идеи сигнальной инвалидации. Как мне кажется, вот этот самый “proof” получился. Оно работает! Понятно, что в отдельных конкретных проектах, она может оказаться неудобной или не очень полезной. Но тут каждый сам волен обтесать её под свои нужды и условия.

Я использовал в качестве примера стандартные сигналы джанги только ради простоты. Конечно можно и нужно использовать свои сигналы, которые ближе к логике конкретных приложений.

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

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

Вот так вот:)

P.S.: Так же, Иван, спасибо за неравный бой с Akismet;)

P.P.S.: bw, твой сервер почты наотрез отказывается принимать письма от меня:(

P.P.P.S.: уже выезжаю в Киев!:)

comments powered by Disqus