1

トランスクルージョンとは、次のようなページを意味します

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

「|」が多すぎると、ページの読み込みが遅くなりますか?

ページ「Template:*」が

*

{{*}} が箇条書きをレンダリングするようにします。

比較してください

(テンプレート: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 もう 1 つ質問があります。トランスクルージョン関係が非常に複雑な場合はどうなりますか?

例えば

ページAは

{{一時 | ~~~ | ~~~ ... (かなり多い) | ~~~ }}

Template:Temp には {{Temp2}} があり、

Template:Temp2 は再び

{{temp3 |~~~ |~~~ ... (非常に多い) |~~~ }}

そのような場合でも、おっしゃった理由により、多くのトランスクルージョンがページ A の読み込み速度に影響を与えることはありませんか?

4

1 に答える 1

2

はいといいえ。ほとんどの場合、いいえ。

はい、ページに多くのテンプレートのトランスクルージョンがあると、テンプレートを DB からロードする必要があり、使用するたびに再解析する必要があるため、解析が多少遅くなります。ただし、多くのキャッシュが行われています。

  • テンプレートが特定のページで 1 回トランスクルージョンされると、そのソース コードがキャッシュされるため、そのページで同じテンプレートをさらにトランスクルージョンしても DB クエリは発生しません。

  • パラメータなしで使用されるテンプレートの場合、MediaWiki はテンプレートの解析済みフォームもキャッシュします。したがって、あなたの例では、一{{*}}度だけ解析する必要があります。

  • いずれにせよ、一度ページが解析されると (通常は誰かがページを編集した後)、MediaWikiは解析された HTML 出力全体をキャッシュし、それを後続のページ ビューで再利用します。したがって、ほとんどのページ ビューでは、ページを再解析する必要がないため、テンプレートのトランスクルージョンはパフォーマンスに影響しません。(ただし、デフォルトのパーサー キャッシュの有効期間はかなり短いことに注意してください。ウィキペディアのようなトラフィックの多いウィキではデフォルトで問題ありませんが、小規模なウィキの場合は、パーサー キャッシュの種類を 1 か月に増やし、パーサー キャッシュの種類を設定することを強くお勧めします。へ。)CACHE_DB

  • 最後に、MediaWiki を展開するための推奨される方法は、リバース キャッシング プロキシを使用するか、ファイル キャッシュを使用することです。これらのいずれも、パーサー キャッシュの前にキャッシング レイヤーを追加します。


編集:追加の質問に答えるには:

  1. パラメータの数に関係なく、各ページにはテンプレートのトランスクルージョンが 1 つしか含まれていません (ページ B のトランスクルージョンを除き{{*}}ますが、これらは効率的にキャッシュする必要があります)。したがって、それらは多かれ少なかれ同等に効率的である必要があります(実際には顕著な違いはないはずです)。

  2. つまり、ほとんどの場合、誰かがページを表示するとき、そのページはキャッシュから提供される (または少なくともそうすべきである) ため、再解析する必要はありません。それが起こらない状況には、次の場合が含まれます。

    • ページが最後に解析されてからの時間が指定された制限を超えている$wgParserCacheExpireTime(デフォルトでは 24 時間ですが、これは可能であり、ほとんどのウィキでは IMO を増やす必要があります)。

    • ページはキャッシュに追加されてから編集されているため、再解析する必要があります (これは通常、[ページを保存] ボタンをクリックした直後に発生します)。

    • ページで使用されているテンプレートが編集されているため、ページを再解析する必要があります。

    • このページからリンクされている別のページが作成または削除されたため、リンクを赤から青に、またはその逆に変更するには再解析が必要です。

    • ページは MediaWiki 拡張機能を使用しており、意図的にキャッシュから除外されています。これは通常、拡張機能が動的に変化するコンテンツをページに挿入するためです。

    • 誰かが故意にキャッシュからページを消去したため、すぐに再解析が行われた、または

    • ページを表示しているユーザーが通常とは異なる言語を使用しているか、ページのレンダリングに影響する設定の他のオプションを変更したため、ページの別のキャッシュ バージョンが生成されました (このバージョンは、同じ設定のセット、または同じユーザーがページを再訪問することによって)。

  3. いつでも、ウィキの前にプロキシを追加したり、ファイル キャッシュを有効にしたりできます。実際、効果的なキャッシュの設定はやや高度な作業であるため、最初にフロント エンド キャッシュを使用せずにウィキを起動して実行するまで待ってから試してください。これにより、キャッシュを設定する前後のパフォーマンスを直接比較することもできます。

于 2013-08-07T07:49:36.613 に答える