如果我不清除缓存,为啥我的 Flask 应用程序不呈现 CSS?

Posted

技术标签:

【中文标题】如果我不清除缓存,为啥我的 Flask 应用程序不呈现 CSS?【英文标题】:Why does my Flask app not render CSS if I don't clear my cache?如果我不清除缓存,为什么我的 Flask 应用程序不呈现 CSS? 【发布时间】:2020-08-27 15:49:05 【问题描述】:

我一直在使用 Flask 并将我正在渲染的 html 链接到 css 样式表。我注意到每当我更新我的 CSS 代码时,我都必须清除缓存才能让它在网页上更新。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我假设您正在加载您的 CSS 文件,例如:

 url_for('static', filename='some/file.css') 

为了在开发中立即刷新,您应该将以下配置变量设置为-1

app.config['SEND_FILE_MAX_AGE_DEFAULT'] = -1

正如@Matvei 所说,这个问题更多地与您的浏览器有关。要对此进行可视化,请打开开发工具,转到 Network 标签并突出显示特定的 CSS 文件。然后在右侧部分中查找 Headers -> Response Headers 下的以下行:

Cache-Control: public, max-age=-1

如果设置已正确应用,则应显示-1。如果它显示任何其他内容,您需要刷新该特定文件,直到它显示-1,可能必须清除您的缓存。这是因为浏览器会根据Cache-Control 标头来选择是否重新加载文件。

请参阅我的 similar answer 以及屏幕截图和文档链接。

【讨论】:

这行app.config['SEND_FILE_MAX_AGE_DEFAULT'] = -1到底是做什么的? @Serket 查看我链接的类似答案以获取更多信息。它基本上将Cache-Control 标头设置为在几秒钟内到期。 -1 实质上禁用了缓存。默认值为 12 小时或 43200。此标头告诉您的浏览器何时重新加载单个资产。显然,如果您经常更改 CSS 文件,您希望禁用此功能。因此设置。【参考方案2】:

tldr:使用 Ctrl-F5 刷新页面(或任何用于硬刷新的键盘快捷键)。 完整答案:

问题(如果你想这样称呼它)是你的浏览器,而不是 Flask。

为了提高速度,浏览器会缓存数据。在您的情况下,您的浏览器正在为您的网页缓存 CSS。您的浏览器不知道您何时更新 CSS,这就是您必须清除缓存的原因。

即使有办法禁用它,我也不会。如果没有缓存,网页浏览会明显变慢。

您可以进行硬刷新,而不是清除整个缓存。这将告诉浏览器直接从服务器重新加载所有数据(包括 CSS)。在 Firefox 中,快捷键是 Ctrl F5。

更多信息在这里:https://humaan.com/blog/clear-your-browser-cache-a-quick-guide/

【讨论】:

以上是关于如果我不清除缓存,为啥我的 Flask 应用程序不呈现 CSS?的主要内容,如果未能解决你的问题,请参考以下文章

如何清除gradle缓存?

ASP 清除缓存 为啥要设置Response.Buffer = True

在 PHP 中如何清除 WSDL 缓存?

缓存后如何清除浏览器中的缓存? [复制]

在我清除缓存之前,android 应用程序不会更新

PHP require 在清除 APC 缓存后仅工作一次,然后出现 500 错误。为啥?