在我正在开发的Django Web应用程序中,我需要在列表中显示多个用户头像。在相关视图中,我使用Django ORM来获取这些URL:
Avatar.objects.filter(id__in=user_list).values('id','url)
接下来,我已经设置了我的nginx网络服务器来缓存静态资源,只需通过:
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript max;
~image/ max;
}
我的理解是,每当处理为头像列表页面提供服务的视图时,就会始终运行早期的Django ORM查询。因此,Web服务器缓存允许我保存GET请求,但不是实际的数据库查找。这种理解是否正确?
如果是这样,只有在浏览器中没有缓存图像时,调用ORM查询的模式是什么?这有可能(或可取)吗?如果没有,为什么不呢?
我有兴趣了解这些案例中的Web开发的最佳实践。说明性的例子很棒!
答案 0 :(得分:0)
在您的情况下,您可能希望保持原样并且每次都查询数据库(并且没有什么不好的!)
浏览器需要为每个图像获取一个URL,以便检查它是否在其缓存中,并且URL最终来自数据库。如果必须,可以通过在服务器端缓存查询结果来解决这个问题,但除非遇到性能问题,否则我不建议这样做。此缓存完全独立于浏览器缓存(并且不知道)。
以下步骤或多或少是我对此问题的心智模型 - 希望这有用:
注意:
Webserver和Imageserver可以相同或不同。 Imageserver发送的缓存标头是让浏览器缓存它们的重要标题。
您提到设置NGINX来缓存静态资源。它不是缓存,而是将包含有关缓存的说明的标头发送到请求资源的浏览器。