gpt4 book ai didi

web - 静态站点生成器基于更改的重新生成

转载 作者:行者123 更新时间:2023-12-04 17:50:31 25 4
gpt4 key购买 nike

每次对站点中的某个文件进行更改时,似乎我发现的所有静态站点生成器都会完全重新生成整个站点。

例如,正在使用的更流行的站点生成器之一是 Jekyll,它为 Github Pages 提供支持。每次作者进行更改(比如在 post 文件中进行语法更正,或更改 about.html 布局)并需要重新生成该内容时,Jekyll 除了重新生成整个站点外别无选择,即使有数百个文件,其输出在最近的编辑中没有变化。

重新生成大型站点所需的时间似乎是大多数静态站点生成器的常见提示。

是否有任何技术原因(来自静态站点生成器的开发或工程的 POV)阻止某人编写静态站点生成器,该生成器对其内容“智能”并且可以自我感知到可以理解哪些文件被更改了,哪些文件依赖于它(反之亦然)并且只会重新生成必要的文件?

由于大多数人(尤其是 Jekyll/GH Pages)用户都将他们的站点存储在 git 存储库中,因此站点生成器似乎可以利用提交信息并跟踪更改并依靠该信息来了解需要重新生成哪些文件以及可以单独留下。想法?

最佳答案

简短的回答:很难。

困难的部分是不知道哪些文件发生了变化。困难的部分是知道哪些输出文件受到更改的文件的影响。例如,如果您更改博客文章的标题,则需要更新主博客索引。任何标记页面也是如此。任何将其他帖子列为“相关帖子”的页面也是如此。如果你的主页上有摘录,同样的交易。

但这并非不可能处理。您可以保留一个有向无环图来跟踪任何给定页面的依赖关系,并重新生成包含更改的其他页面位的页面。它增加了开销和代码复杂性,以及计算时间,但这样做可能是值得的。

但是,比这更难的是知道哪些页面需要重新生成,因为更改了它们尚未关联的项目。如果在博客文章中添加新标签会发生什么?现在,该新标签的标签页也需要重新生成。如果您使用标签生成“相关帖子”,则您网站上的所有帖子都应该重新生成,因为任何给定帖子的“最佳”关系现在可能不同。添加新帖子时会发生什么?为了避免不必要的编译,静态站点生成器必须知道如果该帖子存在,哪些页面会包含该帖子,并重新生成它们。

请注意,在所有这些情况下,误报(未更改但仍重新编译的页面)是可以接受的,但误报(应该重新编译但未重新编译的页面)是绝对 Not Acceptable 。因此,在任何情况下,站点生成器都必须谨慎行事:如果页面有可能在再次编译后发生更改,则必须重新编译。

例如,Nanoc 确实会跟踪您提到的变化。它保留依赖于其他页面的页面的有向无环图,并在编译之间缓存它以限制重新编译的次数。它不会每次都重新生成每个页面,但它经常会重新编译一些不需要编译的页面。还有很大的提升空间。

关于web - 静态站点生成器基于更改的重新生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17607287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com