Cha*_*May 5 code-generation static-site jekyll web github-pages
似乎我发现的所有静态站点生成器每次对站点中的某个文件进行更改时都会重新生成整个站点.
例如,正在使用的一个更受欢迎的网站生成器是Jekyll,它为Github Pages提供支持.每当作者进行更改(比如在帖子文件中进行语法修正,或更改about.html布局)并需要重新生成该内容时,Jekyll别无选择重新生成整个网站,即使有数百个文件,其输出未被最近的编辑保持不变.
重建大型站点所需的时间似乎是对大多数静态站点生成器的常见抱怨.
是否有任何技术原因(来自静态站点生成器的开发或工程的POV)阻止某人编写一个对其内容"智能"的静态站点生成器,并且可以自我意识到它可以理解哪些文件被更改了哪些文件依赖于它(反之亦然)并且只会重新生成必要的文件?
由于大多数人(尤其是Jekyll/GH Pages)用户将他们的站点存储在git存储库中,它甚至看起来像站点生成器可以利用提交信息并跟踪更改并依赖该信息来了解需要重新生成哪些文件和可以单独留下.思考?
简短的回答:这很难.
困难的部分是不知道哪些文件发生了变化.困难的部分是知道哪些输出文件受到更改的文件的影响.例如,如果您更改博客帖子的标题,则需要更新主博客索引.任何标签页也是如此.任何将其他帖子列为"相关帖子"的页面也是如此.如果您在主页上有摘录,那么同样的交易.
但这并非不可能.您可以保留一个有向的非循环图,它跟踪任何给定页面的依赖关系,并重新生成包含其他更改页面的页面.它增加了开销和代码复杂性,以及计算时间,但这样做可能是值得的.
但是,比这更难的是知道哪些页面需要重新生成,因为它们尚未与之相关联的项目发生变化.如果您在博客帖子中添加新标签会发生什么?现在,还需要重新生成该新标记的标记页面.如果您使用标签生成"相关帖子",则应重新生成您网站上的所有帖子,因为现在任何特定帖子的"最佳"关系可能会有所不同.添加新帖子后会发生什么?为了避免不必要的编译,静态网站生成器必须知道哪些网页会已包括该职位如果它身边,并重新生成它们.
请注意,在所有这些情况下,误报(没有更改但仍然重新编译的页面)是可以接受的,但是漏报(应该重新编译但不重新编译的页面)是绝对不可接受的.因此,在每种情况下,站点生成器都必须谨慎行事:如果页面发生更改的可能性再次编译,则必须重新编译.
例如,Nanoc会跟踪您提到的变化.它保留了依赖于其他页面的页面的有向非循环图,并在编译之间对其进行缓存以限制重新编译的次数.它不会每次都重新生成每个页面,但它通常会重新编译一些不需要编译的页面.还有很大的提升空间.
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |