Html 杰基尔:生成一次包含并将其包含到所有页面

Html 杰基尔:生成一次包含并将其包含到所有页面,html,include,jekyll,liquid,Html,Include,Jekyll,Liquid,TL;DR:我能说一次为{%include%}生成内容,然后在多个位置将其删除,而不必在每个位置重新生成吗 我正在用Jekyll建立一个相当大的文档站点,现在有超过50篇文章。它有一个侧边栏,其中列出了所有文章。侧边栏构建在单独的sidebar.html中,然后通过default.html中的{%include sidebar.html%}将其包含在网站的每个页面中 我遇到的问题是,每一篇文章都分别运行sidebar.html的生成,因此我对这段代码进行了50多次生成。我添加的每一篇文章都会向这

TL;DR:我能说一次为
{%include%}
生成内容,然后在多个位置将其删除,而不必在每个位置重新生成吗

我正在用Jekyll建立一个相当大的文档站点,现在有超过50篇文章。它有一个侧边栏,其中列出了所有文章。侧边栏构建在单独的sidebar.html中,然后通过default.html中的
{%include sidebar.html%}
将其包含在网站的每个页面中

我遇到的问题是,每一篇文章都分别运行sidebar.html的生成,因此我对这段代码进行了50多次生成。我添加的每一篇文章都会向这篇文章添加另一个过程,并使所有过程都稍微慢一点,因为生成边栏必须解析项目中的每一篇文章

构建时间已经从基本上为零上升到100秒以上,如果我删除
{%include sidebar.html%}
,它将下降到5秒。当我得到所有的文章,我估计有大约100-200的。然后,我应该在将来对所有文章进行版本控制,这意味着从长远来看,很容易会有1000多篇文章。在这一点上,如果更改一个文件中的一个字母需要一个小时才能在
jekyllservice
jekyllbuild
中重新生成文件,我也不会感到惊讶


我想做的是在构建过程开始时构建一次sidebar.html,并在生成所述页面时将其印在每个页面上。这可能吗?

最快的方法

\u includes/sidebar.html
移动到
sidebar template.html

加上这件事:

---
layout: null
permalink: sidebar-template.html
---
创建一个
Rakefile

TPL = "_site/sidebar-template.html"
TST = "_includes/sidebar.html"

task :default => :nav

desc "Generates sidebar then copy it to be used as an include"
task :nav do

  if !File.exist?(TST)
    puts "Creating dummy #{TST} file"
    open(TST, 'w') do |f|
      f.puts warning
    end
  end

  puts "Building Jekyll 1st run"
  system "jekyll build --trace"

  # delete target file (TST) if exist
  if File.exist?(TST)
      puts "#{TST} exists deleting it"
      rm TST
  end

  # copy generated file as an include
  cp(TPL, TST)

  puts "Building Jekyll AGAIN"
  system "jekyll build --trace"

  puts "task END"
end

只需运行
rake
,就可以生成侧边栏include。

多亏了Ben Balter,现在有了更好的方法

而不是:{%includeyourtemplate.html%} 使用:{%包含缓存的yourtemplate.html%}

在需要构建一次的较大项目(如站点层次结构)上使用时,该项目将被缓存。对于不同页面的其他项目,您仍然希望像往常一样使用include

这里有很好的解释:


绝对减少了现场启动时间

生成一个50篇文章的内容表并不需要这么长时间。你能给我看一下你包含的代码吗?我把它放在pastebin:。我简短地解释了它为什么这么做,并指出了一些已经存在的性能问题,但我还没有找到更好的方法。它分为三个部分。任何关于如何做得更好的建议都将不胜感激。这是一个功能性的目录!今晚我会挖进去的。很好的液体代码。我知道生成此文件可能需要很长时间。我已经尝试了几乎相同的1000页,这是一场噩梦。很明显,我在纯液体中找不到解决办法。你的工作流可以支持插件或rake任务吗?当然可以,但我不熟悉这些。此外,一切都是相当开放的,所以我可以改变它是如何生成的。我考虑一次性生成,因为我可以在javascript代码中应用高亮显示和样式。例如,它将中断jekyll serve(侧边栏不会随更改而动态更新)。然而,这是最好的建议,这让我有点担心杰基尔如何满足我的需要。我现在正在构建一个插件,将{{site.data}}预处理为我需要的格式,这样我就不必为liquid中的每个页面分别构建字符串。我注意到这些增加了渲染时间,远远超过了我的预期。