Mediawiki:许多转换使页面加载速度变慢?

时间:2013-08-07 07:12:50

标签: mediawiki

通过翻译我的意思是像

这样的页面
{{template
| blahblah= 
| asd =
| df=
}}

所以如果“|”太多,那么它们会使页面加载速度慢吗?

让我们说页面“Template:*”是

*

以便{{*}}能够渲染子弹。

请比较

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

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

如果以这种方式进行数千次转换,页面和B页面将显示相同的内容但加载哪一个会更快?

模板:A

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

一页

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

模板:乙

{{{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的推荐方法是在反向缓存代理之后或者使用文件缓存。这些都会在解析器缓存之前添加额外的缓存层。”

  4. 这应该在“在mediawiki上发布任何内容之前”完成吗?或者,在将所有页面发布到mediawiki后,如果我这样做并不重要?

    ===如果翻译关系非常复杂===

    ,该怎么办?

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

    例如

    页面A是

    {{临时 | ~~~ | ~~~ ......(很多) | ~~~ }}

    模板:Temp有{{Temp2}},

    和模板:Temp2再次

    {{TEMP3 | ~~~ | ~~~ ... (非常多) | ~~~ }}

    即使在这种情况下,由于您提到的原因,大量的转换也不会影响Page A的加载速度?

1 个答案:

答案 0 :(得分:2)

是和否。大部分没有。

是的,在页面上进行大量模板转换确实会减慢解析速度,因为模板需要从数据库加载,因为每次使用它们都需要重新分析。但是,有很多caching正在进行中:

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

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

  • 在任何情况下,一旦页面被解析一次(通常在某人编辑之后),MediaWiki caches the entire parsed HTML output并重新使用它以用于后续页面查看。因此,对于大多数页面视图,模板转换对性能有 no 影响,因为页面不需要重新分析。 (但请注意,默认parser cache lifetime相当低。对于像维基百科这样的高流量维基,默认设置为OK,但对于小维基,我强烈recommend将其增加到比如一个月,并将parser cache type设置为CACHE_DB。)

  • 最后,推荐的部署MediaWiki的方法是在reverse caching proxies之后或使用file cache。其中任何一个都会在解析器缓存之前添加额外的缓存层。


修改:要回答其他问题:

  1. 无论参数的数量是多少,每个页面仍然只包含一个模板转换(除了第B页上的{{*}}转换,但是应该有效地缓存这些转换) )。因此,它们应该或多或少地具有相同的效率(例如,在实践中不应该有明显的差异)。

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

    • 自上次解析页面以来的时间超过了$wgParserCacheExpireTime指定的限制(默认情况下为24小时,但这可以和大多数wiki的IMO一起增加),

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

    • 页面上使用的模板已经过编辑,需要重新分页,

    • 此页面链接的其他页面已创建或删除,需要重新分析才能将链接从红色变为蓝色,反之亦然,

    • 该页面使用了故意excludes it from caching的MediaWiki扩展名,通常是因为扩展程序会将动态更改的内容插入到页面中,

    • 有人故意purged来自缓存的页面,导致立即重新分析,或

    • 查看该页面的用户使用了一种不寻常的语言,或者在其首选项中更改了一些影响页面呈现的其他选项,导致为其生成单独的缓存版本的页面(此版本可能会被重复使用)任何其他用户使用同一组首选项,或由同一用户重新访问该页面。)

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