Hugo如何维护网站范围的数据,例如.Site.AllPages?

时间:2017-07-26 04:28:09

标签: go hugo

我正在寻找一些关于Hugo 可能如何管理网站范围数据的一小撮示例,例如Site.AllPages

具体来说,在开始生成页面并制作{{1}之类的内容之前,Hugo似乎太快无法读入每个文件及其元数据。可用 - 但显然必须如此。

Ruby(Jekyll)和Python(Pelican)真的那么慢,还是有一些特定的(算法)方法让Hugo在一切准备就绪之前用来生成页面?

2 个答案:

答案 0 :(得分:4)

没有任何魔法,在.Site.Pages等集合被填充并准备就绪之前,Hugo不会开始任何渲染。

这里有一些关键点:

  • 我们有一个处理管道,我们可以随时进行并发处理,因此您的CPU应该非常繁忙。
  • 每当我们进行内容操作(短代码,表情符号等)时,您很可能会看到一个手工制作的解析器或替换功能,它是为了提高速度而构建的。
  • 我们真的关心“快速”部分,所以我们有一套坚实的基准来揭示任何表现回归。
  • Hugo是使用Go构建的 - 这非常快,并且有一套非常好的工具(pprof,基准支持等)。

使hugo server变体比常规hugo构建更快的其他一些要点:

  • Hugo使用虚拟文件系统,在服务器/开发模式下直接渲染到内存。
  • 我们有一些部分重新加载逻辑。因此,即使我们每次都渲染所有内容,我们也会尝试重新加载和重建已更改的内容文件,如果内容更改等,我们不会重新加载/重建模板。

我会拜访Hugo的主要开发者GitHub。

答案 1 :(得分:1)

您可以看到AllPages in hugolib/page_collections.go

git blame表示已在Sept. 2016 for Hugo v0.18 in commit 698b994中对其进行了修改,以便修复PR 2297 Fix Node vs Page

该PR引用了discussion/improvement proposal "Node improvements"

  

大多数"问题"一旦我们同意页面只是一个页面只是一个页面...

,这将变得更加容易      

节点只是一个带有鉴别器的页面。

     

所以:

     
      
  • 今天的页面是带有鉴别器的页面" page"
  •   
  • 主页是带歧视者的页面" home"或者其他什么
  •   
  • 分类法是带有鉴别器和分类法的页面"
  •   
  • ...
  •   
     

它们有一些结构差异(分页等),但它们基本上只是页面。

     

考虑到这一点,我们可以将它们全部放在一个集合中,并在鉴别器上添加查询过滤器:

     
      
  • .Site.Pages:由discriminator =' page'过滤   *.Site.All:无过滤器
  •   
  • where:当序列为Pages时,添加discriminator =' page',但让用户覆盖
  •   

该密钥(鉴别器)允许快速检索所有页面'。