caching - Jekyll 等静态站点生成器如何处理浏览器缓存

标签 caching browser jekyll static-site

我对 Jekyll 工作原理的理解是,一旦我在本地写博客,Jekyll 会生成一个页面并将其添加到某种索引系统中,以便用户加载主页时,他们可以看到所有帖子的列表。那正确吗?但是,它如何处理浏览器缓存。添加新帖子后,我们如何防止浏览器使用缓存索引并使其每次都获取新索引。
还是我说的完全是胡说八道?

最佳答案

Jekyll 中没有涉及“索引系统”。它生成页面和相关资源(CSS、JS、图像等),仅此而已。

缓存很大程度上取决于您的 HTTP 服务器配置。服务器发送的带有任何资源的 HTTP header 可以告诉浏览器将其保留在其缓存中一段时间​​,或者根本不保留。

例如,我的 Apache HTTP 服务器中有这些设置:
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 year" # Pages ExpiresByType text/html "access plus 15 minutes" # RSS feed ExpiresByType text/xml "access plus 120 minutes" </IfModule>
这告诉浏览器默认将资源在缓存中保留 1 年,但 HTML 页面仅保留 15 分钟,RSS 提要保留 2 小时。所以图片、CSS 和 JS 将被缓存一年,除非浏览器缓存需要释放一些空间。

当然,延迟取决于您的写作频率。我目前正在迁移很多旧内容,因此延迟了 15 分钟,但我通常每周发布一次,因此迁移结束后我会将其设置为 1 或 2 天。

你要明白Expire HTTP header 告诉浏览器将文件保存在缓存中的时间。使用这样的配置,浏览器没有办法现在有一些新的内容。还有其他处理缓存的方法(例如 ETag),它允许浏览器询问服务器是否有新的东西,但它对 Web 性能的效率较低。

所以如果你设置了 HTML 页面缓存 Expire到 1 天,并且用户在您更新它之前获得页面,她将在大约 1 天后获得新页面。

这一点都不困扰我,但你可能会不这么认为。

HTH

关于caching - Jekyll 等静态站点生成器如何处理浏览器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836879/

相关文章:

c# - 使用对象哈希码作为内存缓存键有意义吗?

r - 有没有办法生成 rmarkdown 文档的缓存版本,然后直接从缓存中生成多个输出?

javascript - 选择框的特殊行为(需要您的意见)

loops - 按修改日期而不是发布日期对 Jekyll 帖子进行排序?

java - 密码和用户名存储在 Apache Ignite 中的哪里?

firefox - 真正的 headless (headless)浏览器

html - 当前对 <audio> 的文件支持是什么?

ruby - 缺少 Gem 依赖项

concatenation - jekyll 在循环中分配 concat?

javascript - 我怎样才能强制客户重新下载我的网站?