【问题标题】:Do Django templates get cached in browser?Django 模板会缓存在浏览器中吗?
【发布时间】:2018-07-03 16:22:17
【问题描述】:

假设我们有一个在 Django 中发出的请求,它呈现 my_template.html{foo: bar} 的上下文

 return render(request, "my_template.html", {foo: bar})

现在基于用户活动 foo 和 bar 的变化。假设用户提出了他的第一个请求。 Django 将根据用户活动返回模板和相应的{foo: bar}。假设用户使用不同的活动发出了第二个请求。

Django 会从服务器发送my_template.html 到浏览器还是只发送更改后的context 到浏览器?模板是否缓存在浏览器中?

案例一:

如果模板被缓存在浏览器中,如果部署了一些更改的代码,它会反映在客户端的浏览器中吗?这是否适用于比较两个模板的 md5 哈希(如果它们不同步,然后从 Django 服务器下载模板)?

案例2

如果每次请求都渲染模板,那是否意味着带宽使用不乐观?

我读到,在节点和角度中,javascript 包被缓存在客户端浏览器中,并且只有数据(context {foo: bar})调用被发送到服务器,因此带宽使用更好,加载速度更快,这是真的。

【问题讨论】:

  • Django 模板在服务器上呈现,并为每个请求发送一个完整的页面。但是即使使用服务器端渲染,也有一些方法可以缓存。 docs.djangoproject.com/en/2.0/topics/cache/#downstream-caches
  • 带宽很便宜。除非您有真正充分的理由预先优化带宽,否则最好花时间优化开发人员的生产力和应用程序稳定性。如果它需要你 3 倍的时间,并且一直跌倒,那么每个请求都减少 5kb 是没有意义的。当您真正知道热路径在哪里时,您可以随时逐步添加 Angular/Vue/FrameworkXYZ。
  • 当我指的是带宽时,我指的是在客户端和服务器之间传输的数据,这在互联网连接缓慢时很重要
  • @saitejapakalapati “带宽”不是指传输的数据,而是指数据传输的速度。您所说的“带宽”是托管服务提供商推广的误称。

标签: python node.js django angular


【解决方案1】:

Django 是一个服务器端框架。模板在发送到客户端之前在服务器中完全呈现。结果浏览器对模板一无所知。只有完全呈现的 html。

但是像这样比较 Django 和 Angular 是没有意义的。如果没有某种后端框架(很可能是 Django),您将无法单独使用 Angular - 这两者可以很好地协同工作。

【讨论】:

  • 谢谢!。阅读 django rest 框架和转译后形成的 angular javascript 包。因此,如果我使用 DRF 和 Angular,以便这些 js 包缓存在浏览器中,现在服务器调用将仅用于数据服务,因此 html 文件并不总是从服务器呈现,这是我的理解正确。
  • 您正确理解@saitejapakalapati。如果您使用 DRF,您的后端是一个 API,您将从它获取资源。您的客户端(在这种情况下是使用 Angular 制作的)将使用您的 API 中的资源。 :-)
  • @Daniel Roseman - 那么你会说在使用 Django 时可以做诸如“DOM Diffing”之类的事情吗?这就是我在阅读本文时所想到的(例如,在 React.js 中)。
【解决方案2】:

根据我的经验,模板不会被缓存,或者至少不会以任何阻止更新的方式缓存。保存对模板的更新后,会出现一个可能需要几秒钟的自动部署过程(如果您使用了“runserver”命令,则可以在命令行中查看)。自动部署完成后,模板将在浏览器刷新时重新提供。

【讨论】:

  • 您有更多信息吗?我在缓存模板时遇到问题,我知道如何刷新它们:stackoverflow.com/questions/55568872/…
  • @AndrewSwift 你应该可以按 Ctrl + F5 重新加载缓存
  • 不是浏览器缓存,而是缓存模板的服务器。有关详细信息,请参阅问题。
【解决方案3】:

就像您提到的使用 Node 和 Angular 的示例一样。您还可以将 Angular 与 Django 一起使用,并使用一些可以轻松添加到 Angular 的渐进式 Web 应用程序等技术,您可以缓存客户端模板。这样,Django 服务器将只负责通过 REST API 发送数据,而缓存的 Angular 应用程序/PWA 将呈现数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2014-08-21
    • 2011-10-11
    • 2015-02-15
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多