【问题标题】:How to test django caching?如何测试 django 缓存?
【发布时间】:2010-09-25 18:10:49
【问题描述】:

有没有办法确定页面来自生产服务器和开发服务器上的缓存?

解决方案不应涉及缓存中间件,因为并非每个项目都使用它们。虽然解决方案本身可能是中间件。

仅检查数据是否过时并不是 IMO 一种非常安全的测试方法。

【问题讨论】:

    标签: python django caching django-cache


    【解决方案1】:

    我们做了很多组件缓存,但并非所有组件都同时更新。所以我们在一个普遍包含的上下文处理器中设置主机和时间戳值。在我们粘贴的每个模板片段的顶部:

    <!-- component_name {{host}} {{timestamp}} -->
    

    component_name 只是让查看源代码和搜索该字符串变得容易。

    我们所有的对象详细信息页面视图都定义了一个上下文变量“page_object”,我们在 base.html 模板主文件的顶部有这个:

    <!-- {{page_object.class_id}} @ {{timestamp}} -->
    

    class_id() 是我们所有主要内容类都使用的超类的方法。只是:

    def class_id(self):
        "%s.%s.%s" % (self.__class__._meta.app_label,
                        self.__class__.__name__, self.id)
    

    如果您加载一个页面并且任何时间戳都超过几秒,那么很有可能该组件已被缓存。

    【讨论】:

    • 优雅的解决方案。也可以自动化。谢谢。
    • 为了方便起见,您是否有您在 djangosn-ps.org 或其他网站某处提到的上下文处理器?
    • 添加上下文处理器很简单! 1. 创建一个文件,例如my_context.py。 2. 创建一个接受请求对象的函数,例如我的上下文(请求)。 3. 返回所有模板可用的有趣内容的字典。 4. 将“my_context.my_context”添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS。 5. 利润!
    【解决方案2】:

    Peter Rowells 的建议效果很好,但您不需要自定义模板上下文处理器 对于时间戳。您可以简单地使用模板标签:

     <!-- {% now "jS F Y H:i" %} --> 
    

    【讨论】:

    • FWIW 当我将它添加为模板的第一行时,这严重破坏了我在 IE8 中的网站样式。当它在 html 标签内时似乎很好。我把它放在html评论标签中。花了很长时间才弄清楚这是我的 CSS 问题的原因。
    • 我很遗憾听到这个消息,恐怕我忘记了评论标签。我相应地修复了我的解决方案条目。
    • 它只需要在 声明中。只是以为我会为将来阅读此主题的人发帖。但是谢谢,这是一个简单有效的解决方案
    【解决方案3】:

    模拟视图,点击页面,看看是否调用了模拟。如果不是,则使用缓存。

    【讨论】:

      【解决方案4】:

      您使用缓存的原因是为了提高性能。通过对您的服务器运行负载测试来测试性能。如果服务器的性能符合您的需求,那么一切就绪!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 2011-01-29
        • 2010-10-24
        • 2021-08-19
        • 1970-01-01
        • 2015-12-29
        • 2017-05-21
        相关资源
        最近更新 更多