像 Jekyll 这样的静态站点生成器如何处理浏览器缓存

How does static site generator like Jekyll handle browser caching

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

Jekyll 中没有 "indexing system"。它生成页面和相关资源(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会被缓存一年除非浏览器缓存需要释放一些space.

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

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

因此,如果您将 HTML 页面缓存 Expire 设置为 1 天,并且用户在您更新之前获取该页面,她将在几乎 1 天后获取新页面。

我一点都不介意,但你可能不这么想。

HTH