Для повышения производительности веб-приложения, особенно если оно задействовано в длительных операциях, используются методы кэширования. TurboGears предоставляет два типа методов кэширования —
Кеширование целых страниц
Он работает на уровне протокола HTTP, чтобы избежать полных запросов к серверу, поскольку браузер пользователя или промежуточный прокси-сервер (например, Squid) перехватывают запрос и возвращают кэшированную копию файла.
Кэширование на уровне приложения
Это работает на сервере приложений, чтобы кэшировать вычисленные значения, часто результаты сложных запросов к базе данных, так что будущие запросы могут избежать необходимости пересчитывать значения. Для веб-приложений кэширование на уровне приложений обеспечивает гибкий способ кэширования результатов сложных запросов, так что общая загрузка данного метода контроллера может быть уменьшена до нескольких пользовательских или конкретных запросов и накладных расходов на рендеринг шаблона. ,
Кэширование на уровне приложения
Как упоминалось ранее, проект «быстрого запуска» TurboGears настроен на включение пакета Beaker для поддержки кэширования. Beaker поддерживает следующие бэкэнды, используемые для хранения кеша:
-
память — используется для хранения на процесс. Это очень быстро.
-
файловая система — для каждого процесса хранения, а также многопроцессорные.
-
База данных DBM — для каждого процесса, многопроцессная, довольно быстрая.
-
База данных SQLAlchemy — хранилище для каждой базы данных на сервере. Более медленный по сравнению с приведенными выше вариантами.
-
Memcached — многосерверный кеш на основе памяти.
память — используется для хранения на процесс. Это очень быстро.
файловая система — для каждого процесса хранения, а также многопроцессорные.
База данных DBM — для каждого процесса, многопроцессная, довольно быстрая.
База данных SQLAlchemy — хранилище для каждой базы данных на сервере. Более медленный по сравнению с приведенными выше вариантами.
Memcached — многосерверный кеш на основе памяти.
Кэширование контроллера
Для быстрого кэширования контроллера доступен декоратор cached () . Все тело контроллера кэшируется в зависимости от различных параметров запроса. Определение декоратора tg.decorators.cached () следующее
tg.decorators.cached(key, expire, type, query-args, cache_headers, invalidate_on_startup, cache_response)
Описание параметров выглядит следующим образом —
Sr.No. | Параметры и описание |
---|---|
1 |
ключ Определяет параметры контроллера, используемые для генерации ключа кэша. |
2 |
истекать Время в секундах до истечения срока действия кэша. По умолчанию «никогда». |
3 |
Тип dbm, память, файл, memcached или None. |
4 |
cache_headers Кортеж имен заголовков, указывающих заголовки ответа. |
5 |
invalidate_on_startup Если True, кеш становится недействительным каждый раз, когда приложение запускается или перезапускается. |
6 |
cache_response ответ должен быть кэширован или нет, по умолчанию True. |
ключ
Определяет параметры контроллера, используемые для генерации ключа кэша.
истекать
Время в секундах до истечения срока действия кэша. По умолчанию «никогда».
Тип
dbm, память, файл, memcached или None.
cache_headers
Кортеж имен заголовков, указывающих заголовки ответа.
invalidate_on_startup
Если True, кеш становится недействительным каждый раз, когда приложение запускается или перезапускается.
cache_response
ответ должен быть кэширован или нет, по умолчанию True.
Ниже приведен пример кэширования контроллера:
@cached(expire = 100, type = 'memory') @expose() def simple(self): return "This is a cached controller!"
Кэширование на уровне шаблона
Механизм шаблонов Genshi извлекает шаблон из кэша, если его содержимое не изменилось. Размер этого кэша по умолчанию — 25. По умолчанию автоматическая перезагрузка шаблонов имеет значение true. Чтобы повысить производительность, в app_cfg.py можно сделать следующие настройки:
[app:main] genshi.max_cache_size = 100 auto_reload_templates = false
Чтобы кэшировать шаблон, вам просто нужно вернуть параметр tg_cache из контроллера, который отображает кэшированный шаблон.
Tg_cache — это словарь, который принимает следующие ключи:
-
ключ — ключ кеша. По умолчанию: нет.
-
expire — как долго кэш должен оставаться в живых. По умолчанию: никогда не истекает
-
тип — память, дбм, memcached. По умолчанию: дБм.
ключ — ключ кеша. По умолчанию: нет.
expire — как долго кэш должен оставаться в живых. По умолчанию: никогда не истекает
тип — память, дбм, memcached. По умолчанию: дБм.
Следующий пример иллюстрирует кеширование шаблона: