1

通过嵌入,我的意思是像这样的页面

{{template
| blahblah= 
| asd =
| df=
}}

那么如果“|”太多了,会不会让页面加载变慢呢?

假设页面“模板:*”是

*

这样 {{*}} 将呈现一个子弹。

请比较

(模板:A 和页面“A 页”)

(模板:B和页面“B页面”)

A 页面和 B 页面都将显示相同的内容,但是如果以这种方式有数千个更多的嵌入,那么哪一个会更快加载?

模板:A

* {{{a}}}
* {{{b}}}
* {{{c}}}

页面

{{A
|a=q
|b=w
|c=e
}}

模板:B

{{{a}}}

B页

{{B
|a={{*}} q <br> {{*}} w <br> {{*}} e
}}

=====问题补充==============

@llmari_Karonen 非常感谢。

  1. 如果数字接近1000怎么办,那么A页就是

    {{A |a1=q |a2=w |a3=e .... |a999=w |a1000=h }}

    仍然,感谢缓存,“对于大多数页面视图,模板嵌入对性能没有影响”?

  2. “对于大多数页面浏览量”是什么意思?你的意思是页面浏览量足够低?

  3. 您说“部署 MediaWiki 的推荐方法是在反向缓存代理之后或使用文件缓存。其中任何一个都将在解析器缓存前添加一个额外的缓存层。”

这是否应该在“在”媒体维基上发布任何内容之前完成?或者在我将所有页面发布到 mediawiki 之后我是否这样做并不重要?

===如果嵌入关系很复杂怎么办===

@llmari_Karonen 我还有一个问题。如果嵌入关系非常复杂怎么办?

例如

页面 A 是

{{温度 | ~~~ | ~~~ ... (相当多) | ~~~ }}

并且 Template:Temp 有 {{Temp2}},

和 Template:Temp2 又是

{{temp3 |~~~ |~~~ ...(很多)|~~~ }}

即使在这种情况下,由于您提到的原因,大量的嵌入不会影响页面A的加载速度吗?

4

1 回答 1

2

是和不是。大多数情况下没有。

是的,在页面上有大量模板嵌入确实会减慢解析速度,因为模板需要从数据库加载,而且每次使用时都需要重新解析。但是,有很多缓存正在进行:

  • 一旦模板在给定页面上被嵌入一次,其源代码就会被缓存,以便在该页面上进一步嵌入相同模板不会导致任何进一步的数据库查询。

  • 对于不带参数使用的模板,MediaWiki 也会缓存模板的解析形式。因此,在您的示例中,{{*}}只需要解析一次。

  • 在任何情况下,一旦页面被解析一次(通常是在有人编辑它之后),MediaWiki 会缓存整个解析的 HTML 输出并将其重新用于后续页面查看。因此,对于大多数页面视图,模板嵌入对性能没有影响,因为不需要重新解析页面。(但是,请注意默认的解析器缓存寿命相当低。对于像维基百科这样的高流量 wiki,默认值是可以的,但对于小型 wiki,我强烈建议将其增加到一个月,并设置解析器缓存类型CACHE_DB。)

  • 最后,部署 MediaWiki 的推荐方法是在反向缓存代理之后或使用文件缓存。其中任何一个都会在解析器缓存前添加一个额外的缓存层。


编辑:要回答您的其他问题:

  1. 不管有多少参数,每个页面仍然只包含一个模板嵌入(嗯,除了{{*}}页面 B 上的嵌入,但应该有效地缓存那些)。因此,它们应该或多或少同样有效(如在实践中不应该有明显的差异)。

  2. 我的意思是,大多数时候,当有人查看页面时,它将(或至少应该)从缓存中提供服务,因此不需要重新解析。不会发生这种情况的情况包括:

    • 自上次解析页面以来的时间超过了指定的限制$wgParserCacheExpireTime(默认为 24​​ 小时,但对于大多数 wiki,这可以并且 IMO 应该增加),

    • 该页面在添加到缓存后已被编辑,因此需要重新解析(这通常在单击“保存页面”按钮后立即发生),

    • 页面上使用的模板已被编辑,需要重新解析页面,

    • 从该页面链接的另一个页面已创建或删除,需要重新解析以将链接从红色变为蓝色,反之亦然,

    • 该页面使用了故意将其从缓存中排除的 MediaWiki 扩展,通常是因为该扩展将动态变化的内容插入到页面中,

    • 有人故意从缓存中清除页面,导致立即重新解析,或者

    • 查看页面的用户使用了一种不寻常的语言,或者更改了他们偏好中的一些其他影响页面呈现的选项,从而导致为他们生成页面的单独缓存版本(此版本可能被使用相同的偏好设置,或由相同的用户重新访问页面)。

  3. 您可以随时在 wiki 前添加代理和/或启用文件缓存。事实上,由于设置有效的缓存是一项有点高级的任务,您可能希望等到您的 wiki 在没有前端缓存的情况下启动并运行,然后再尝试。这也允许您直接比较设置缓存之前和之后的性能。

于 2013-08-07T07:49:36.613 回答