2015-03-17 1 views
0

Я пишу приложение для блога. Все страницы (списки сообщений, детали сообщения) действительно статичны, я могу предсказать, когда должно быть обновление (например, когда я пишу новое сообщение или добавляется комментарий). Я мог бы использовать @cache_page для кэширования всех представлений.Django cache все, кроме части

Единственная проблема заключается в том, что на каждой странице у меня есть данные, собранные из Twitter, которые я хочу обновлять каждые 5 минут.

Django предлагает кэширование шаблонов, кэширование для каждого представления и структуру кэша низкого уровня. При использовании структуры низкого уровня я могу избежать вычисления большей части того, что должно отображаться на странице (например, кеширование почтовых запросов, комментариев, тегов ...).

Каков наилучший подход к моей проблеме? Как агрессивно кэшировать почти все для просмотра/шаблона, но несколько частей?

Я хочу избежать использования iframes.

Благодаря

+1

обновите эти части с помощью ajax на загрузке страницы? – Kedar

+0

Это простая идея, о которой я не думал, спасибо. Я бы хотел знать, есть ли что-то на основе django. – pistacchio

ответ

1

не может исключить вас определенные части шаблона Джанго для кэша не должен эту работу в любой другой шаблон двигателя я знаю.

Моим советом было бы использовать JavaScript для асинхронной загрузки, когда вы меняете контент. Это должно быть особенно легко с Twitter, поскольку уже предлагают отличный API.

Это не подходит, вы всегда можете использовать Django template caching, чтобы кешировать только части вашего шаблона.

+0

Благодарим вас за ответ. Проблема с кэшированием шаблонов заключается в том, что она позволяет избежать переустановки страницы, но обычно большая часть работы - это поиск на стороне сервера содержимого, чтобы показать, так что это будет не очень полезно. – pistacchio

+0

Я уверен, что вы больше не можете делать эту клиентскую сторону (в прошлом, возможно, в прошлом). В настоящее время Twitter требует аутентификации на всех конечных точках API, и они удалили RSS-каналы, поэтому вы не можете просто получать каналы через AJAX. Вы можете использовать один из своих встроенных виджетов, который они предоставляют, или сделать это на стороне сервера. –

+0

@pistacchio, поэтому у вас есть обычный кеш. В общем кеше происходит медленное (pep20). Кэширование всей страницы является ленивым, и поэтому на самом деле это действительно так. Вы должны скорее кэшировать свои вызовы API и очень медленные циклы шаблонов. – codingjoe

0

Одним из вариантов может быть установка лака на сервере. Я сам не знаком с Varnish, но, как я понимаю, вы можете использовать Edge Side Includes для кэширования только определенных фрагментов страницы.

Очевидно, что это может не устраивать ваш случай использования, но это звучит как возможность.