【发布时间】:2015-08-11 22:44:45
【问题描述】:
TL;DR:我可以说以某种方式为 {% include %} 生成一次内容,然后在多个位置将其标记出来,而不必在每个位置重新生成它吗?
我正在使用 Jekyll 构建一个相当大的文档站点,目前有超过 50 篇文章。它有一个侧边栏,其中列出了所有文章。侧边栏内置在单独的 sidebar.html 中,然后包含在网站上的每个页面中,默认.html 中有 {% include sidebar.html %}。
我遇到的问题是每篇文章都单独运行 sidebar.html 的生成,所以我对那段代码有超过 50 代传递。我添加的每篇文章都为此添加了另一个传递,并使所有传递变得更慢,因为生成侧边栏必须解析项目中的每篇文章。
构建时间已经从基本上为零增加到超过 100 秒,如果我删除 {% include sidebar.html %},它会下降到 5 秒。当我得到所有文章时,我估计大约有 100-200 篇。然后我应该在未来对所有文章进行版本控制,这意味着从长远来看很容易有 1000 多篇文章。那时,如果更改一个文件中的一个字母需要大约一个小时来重新生成 jekyll serve 和 jekyll build 中的文件,我不会感到惊讶。
我想做的是在构建过程开始时构建一次sidebar.html,并在我生成所述页面时将其标记到每个页面。这可能吗?
【问题讨论】:
-
生成一个包含 50 篇文章的目录并不需要很长时间。你能显示你包含的代码吗?
-
我把它放到了 pastebin 上:pastebin.com/KBKbQr4P。我在那里简短地解释了为什么它会这样做,并指出已经存在一些性能问题,但我还没有找到更好的方法来做到这一点。它分为三个部分。任何关于如何更好地做到这一点的建议也很感激。
-
这是一个实用的目录!今晚我会去挖掘。
-
漂亮的液体代码。我知道生成它可能需要很长时间。我已经尝试了几乎相同的 1000 页,这是一场噩梦。我显然在纯液体中找不到解决方法。您的工作流程是否可以支持插件或 rake 任务?
-
当然可以,但我不熟悉这些。此外,一切都非常开放,因此我可以更改它的生成方式。我想到了一次性生成,因为我可以在 javascript 代码中应用突出显示和样式。
标签: html include jekyll liquid