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

Быстрее, ещё быстрее!

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

Кеширование шаблонных тегов

Интересный метод, который позволяет кешировать результат работы шаблонного тега, особенно актуален для разного вида inclusion тегов. Пример реализации предложил Маньяк в своём форуме вот тут. Основной проблемой как всегда является инвалидация и уникальный идентификатор записи. В данном случае первая решается выставление таймаута, вторая определением специальной функции, которая должна сгенерировать уникальный идентификатор.

Всё хорошо, но требовать инвалидацию по таймауту это не интересно. Гораздо интереснее сбрасывать кеш, когда действительно изменились данные. Отсюда следующая концепция.

Инвалидация кеша с помощью сигналов

Это интересная идея принадлежит Сергею Кириллову(хотя конечно наверно не ему одному она пришла в голову, просто попался на глаза именно его вариант), которую он озвучил в django-developers Суть простая - сбрасывать кеш, по пришествию какого-либо сигнала. Просто и со вкусом, но почему-то не получила большого отклика по горячим следам в том треде.

Если развить и унифицировать, то может получиться очень интересно и практично. Всё хочу этим заняться, но как всегда, руки не доходят.

Ещё быстрее

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

Схожую концепцию, но немного другую, и как мне кажется, более продвинутую, реализацию предложил совсем недавно некий SuperJared. Тоже любопытно и заслуживает внимания.

Хотя конечно варианты кеширования целиком страницы интересны, но зачастую мало применимы на практики из-за большого числа динамических элементов и резонного желания, чтобы они были всегда актуальны:)

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

А вы какие техники кеширования используете?

comments powered by Disqus