尽快通过path/name获取集合页面变量
Get collection page variable by path/name as fast as possible
假设我有一个名为 CardMaster
的 Jekyll 数据(对象数组)和一个名为 charas
.
的 Jekyll 集合
我有一个页面需要为 CardMaster
的每个 cardInfo
循环。对于每个 cardInfo
,charas
集合中有一个独特的页面,其中包含我需要的更多信息。
这是我目前可以运行的代码,但是速度很慢(O(N^2),N大约是几百)。
{% assign cardInfos = site.data.CardMaster | where: "stockOrder", 1 %}
<ul>
<!-- this will loop N times -->
{% for c in cardInfos %}
<li>
<!-- print some info from `c` -->
{% capture page_cond %}item.name == "{{ c.resourceName }}.md"{% endcapture %}
<!-- this will take O(N) time -->
{% assign page = site.charas | where_exp: "item", page_cond | first %}
<!-- print some info from `page` -->
{% endfor %}
</ul>
我想做的是使 {% assign page = site.charas | where_exp: "item", page_cond | first %}
更快,就像是否可以 {% assign page = site.charas_page_map["{{c.resourceName}}.md"] %}
将时间复杂度从 O(N) 降低到 O(常数)。
将 Jekyll 数据 CardMaster
合并到 Jekyll 集合 charas
或相反是不可行的,因为 CardMaster
是机器定期从外部源生成的,而 charas
是由人工维护的.
该网站托管在 Github 个页面上,因此禁止使用大多数 Jekyll 插件。
最后我只是用自定义的 Jekyll 插件来实现这个,因为可以在 Github Actions 中构建你的站点(使用你想要的任何版本的 Jekyll)并发布到 Github Pages (而且构建时间也更快,所以这是一个加号)
假设我有一个名为 CardMaster
的 Jekyll 数据(对象数组)和一个名为 charas
.
我有一个页面需要为 CardMaster
的每个 cardInfo
循环。对于每个 cardInfo
,charas
集合中有一个独特的页面,其中包含我需要的更多信息。
这是我目前可以运行的代码,但是速度很慢(O(N^2),N大约是几百)。
{% assign cardInfos = site.data.CardMaster | where: "stockOrder", 1 %}
<ul>
<!-- this will loop N times -->
{% for c in cardInfos %}
<li>
<!-- print some info from `c` -->
{% capture page_cond %}item.name == "{{ c.resourceName }}.md"{% endcapture %}
<!-- this will take O(N) time -->
{% assign page = site.charas | where_exp: "item", page_cond | first %}
<!-- print some info from `page` -->
{% endfor %}
</ul>
我想做的是使 {% assign page = site.charas | where_exp: "item", page_cond | first %}
更快,就像是否可以 {% assign page = site.charas_page_map["{{c.resourceName}}.md"] %}
将时间复杂度从 O(N) 降低到 O(常数)。
将 Jekyll 数据 CardMaster
合并到 Jekyll 集合 charas
或相反是不可行的,因为 CardMaster
是机器定期从外部源生成的,而 charas
是由人工维护的.
该网站托管在 Github 个页面上,因此禁止使用大多数 Jekyll 插件。
最后我只是用自定义的 Jekyll 插件来实现这个,因为可以在 Github Actions 中构建你的站点(使用你想要的任何版本的 Jekyll)并发布到 Github Pages (而且构建时间也更快,所以这是一个加号)