2

我们正在运行一个小型 wiki 农场(相同主题;六种语言并且还在不断增长),并且最近更新了大多数模板以使用多层元模板,以便于维护和可读性。

我们希望为所有语言标准化这些模板,因此它们中的大多数将在每个 wiki 上包含完全相同的代码。这就是为什么,为了进一步简化维护,我们正在考虑使用可怕的嵌入(更具体地说,替换),以便这些元模板只存储在一个 wiki 上,并且只需要在该 wiki 上进行更新,而不是在每个单版。

(注:如果您能想到更好的主意,请不要犹豫对这篇文章发表评论!)

然而,可怕的嵌入被称为效率低下,因此我需要更多地了解 MediaWiki 缓存该方式包含的内容的方式。

如果我理解正确,页面的 HTML 输出将存储在解析器缓存中,持续时间为 $wgParserCacheExpireTime。默认值为 1 天,但在中小型 wiki 上增加它是安全的,因为如果页面本身或包含的页面被更新(以及在其他一些小情况下),内容无论如何都会得到更新。

还有一个可怕的嵌入的缓存持续时间:$wgTranscludeCacheExpiry。很好,因为您不想每次都进行 HTTP 调用。但是,默认值 1 小时不适合较小的 wiki,在这些 wiki 上可能只能不时查看文章,因此使缓存完全无用。

  • 如果页面 A 使用包含来自另一个 wiki 的模板 C 的模板 B,是否必须在超过 $wgTranscludeCacheExpiry 后完全重新生成页面 A?或者在超过 $wgParserCacheExpireTime 之前它仍然可以使用模板 B 的解析器缓存吗?

  • 然后您可以将 $wgTranscludeCacheExpiry 增加到一个月,就像解析器缓存一样,但是如果嵌入的模板是,页面不会自动更新,对吗?

  • 如果是,那么使用该嵌入模板刷新页面是否是更新其他 wiki 的唯一解决方案?

4

1 回答 1

1

恕我直言,找出答案很简单:试试吧!$wgScaryTranscluding很少使用,但少数尝试启用它的人报告说问题很少。还有基于 JavaScript 的替代方案,请参阅手册。

清除很少是一个大问题:一个跨wiki模板不太可能包含你现在绝对想出去的东西。如果缓存对您来说不够激进,请将其设置为一周或一个月,看看是否有问题。Ilmari Karonen 建议使用如此长的缓存,即使是 HTML 也是如此。

于 2014-12-09T17:44:20.133 回答