【问题标题】:Django cache everything but a pieceDjango缓存除了一块之外的所有东西
【发布时间】:2015-05-19 15:11:26
【问题描述】:

我正在编写一个博客应用程序。所有页面(帖子列表、帖子详细信息)都是静态的,我可以预测何时必须更新(例如当我写新帖子或添加评论时)。我可以使用@cache_page 来缓存整个视图。

唯一的问题是,在每个页面中,我都有一些从 Twitter 收集的数据,我想每 5 分钟更新一次。

Django 提供模板缓存、按视图缓存和低级缓存框架。使用低级框架,我可以避免计算页面上必须显示的大部分内容(如缓存 Post 查询、cmets、标签...)。

解决我的问题的最佳方法是什么?如何积极缓存视图/模板的几乎所有内容,但只有少数部分?

我想避免使用 iframe。

谢谢

【问题讨论】:

  • 在页面加载时使用 ajax 更新那些部分?
  • 这是一个我没有想过的简单想法,谢谢。不过,我想知道是否有基于 django 的东西。

标签: django caching django-cache


【解决方案1】:

您不能为缓存排除 Django 模板的某些部分,这不应该在我知道的任何其他模板引擎中工作。

我的建议是使用 JavaScript 异步加载不断变化的内容。使用 Twitter 应该特别容易,因为它已经提供了很棒的 AP​​I。

如果不适合你,你可以随时使用Django template caching,只缓存模板的一部分。

【讨论】:

  • 感谢您的回答。模板缓存的问题在于它避免了重新构建页面,但通常大部分工作是服务器端检索要显示的内容,因此这不会很有好处。
  • 我很确定你不能再做这个客户端了(但是过去你可以)。如今,Twitter 要求对所有 API 端点进行身份验证,并且他们已经删除了 RSS 提要,因此您不能只通过 AJAX 获取提要。您可以使用他们提供的嵌入式小部件之一,也可以在服务器端使用。
  • @pistacchio 这就是您拥有常规缓存的原因。一般来说缓存什么是慢的(pep20)。缓存整个页面是惰性的,这就是为什么真正使用 is。你应该缓存你的 API 调用和非常慢的模板循环。
【解决方案2】:

一个选项可能是在服务器上设置 Varnish。我自己不熟悉 Varnish,但据我了解,您可以使用 Edge Side Includes 仅缓存页面的某些片段。

显然它可能不适合您的用例,但听起来很有可能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多