Ответ
Кеширование шаблонов в Django — это механизм, который сохраняет скомпилированный HTML-код шаблона в памяти, чтобы избежать его повторной компиляции при каждом запросе. Это значительно снижает нагрузку на CPU и ускоряет время ответа сервера, особенно для сложных шаблонов.
Принцип работы:
- При первом запросе Django находит, компилирует и рендерит шаблон.
- Скомпилированный объект шаблона сохраняется в кеш.
- При последующих запросах Django немедленно достает готовый объект из кеша, пропуская этапы поиска и компиляции.
Как включить:
Для активации необходимо в settings.py обернуть стандартные загрузчики шаблонов в django.template.loaders.cached.Loader.
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
# APP_DIRS: True говорит Django искать шаблоны в директориях приложений
'APP_DIRS': False,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
# Оборачиваем загрузчики в 'cached.Loader'
'loaders': [
('django.template.loaders.cached.Loader', [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
]),
],
},
},
]
Важно: Кеширование загрузчика шаблонов включается только тогда, когда DEBUG = False. В режиме разработки оно неактивно, чтобы вы сразу видели изменения в файлах шаблонов.
Ответ 18+ 🔞
Да ты посмотри, какая дичь! Django, блядь, каждый раз, как какую-нибудь страничку рисует, он шаблон ищет, компилирует его в этот... в пиздопроебибный HTML, и только потом отдаёт. А представь, если шаблон сложный, с кучей наследований и тегов? Это ж, ёпта, процессор будет просто вздрачивать на каждом запросе, как последний бздун!
Так вот, умные дядьки придумали кеширование шаблонов. Суть проста, как три рубля, блядь:
- Первый раз, когда запросили страницу — всё по-честному: нашёл, скомпилировал, отрендерил, в рот меня чих-пых.
- А вот скомпилированный шаблон — эту самую готовую к работе хуйню — он засовывает в кеш, в память.
- А дальше, когда приходит следующий лох, он уже не компилирует нихуя, а сразу из кеша достаёт готовенькое и подставляет данные. Скорость — овердохуища!
Как это включить, чтобы не ебаться?
Лепишь в settings.py вот такую магию. Главное — обернуть своих загрузчиков в этого cached.Loader, как детишек в тёплое одеяло.
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
# Смотри, APP_DIRS теперь False! Иначе нихуя не заработает.
'APP_DIRS': False,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
# А вот тут и происходит обёртывание. Видишь?
'loaders': [
('django.template.loaders.cached.Loader', [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
]),
],
},
},
]
Важный нюанс, блядь! Эта хитрая жопа работает только когда DEBUG = False. Потому что когда ты в режиме разработки, тебе надо сразу видеть изменения в шаблоне, а не кеш ебать сломя голову чистить. А на боевом сервере — оно самое, красота!