Help:テンプレートの制限
ウィキペディア日本語版のヘルプページです。
概要
編集制限がおこりやすい事例
編集読み込み制限は、同じテンプレートを何度も使用している場合によく起こります。例えば、長い表の各行に同じテンプレートを呼び出しているような場合です。テンプレート自体のデータが小さくても、テンプレート呼び出しの際ごとにテンプレートページのソース全体量が計上されますので、思っているよりも簡単に制限値に達することになります。また、当然ながら、呼び出しているテンプレートのサイズが大きければ大きいほど、制限に達するのも早くなります。サイズが大きい理由としてはテンプレート本体が複雑であったり、呼び出し先で必要なデータ以外の多くのデータを含んでいたりすることが考えられます。
制限値に達しているか判別するには
編集生成されたページ本体のHTMLソース中には、ソースの比較的末尾にHTMLコメントによってカウンターの数値が描き込まれています。そこで、ブラウザのHTMLソースを表示する機能を利用してHTMLソースを確認することで、そのページのカウンターの数値を知る事ができます。
例えば、沖縄県(2008年4月23日 (水) 09:39 (UTC) の版)のページの生成されたHTMLソースにはつぎのコメントが含まれています。
<!--
NewPP limit report
Preprocessor node count: 2058/1000000
Post-expand include size: 66434/2048000 bytes
Template argument size: 13611/2048000 bytes
Expensive parser function count: 0/500
-->
/の前の数値が計上された数値、/の後の数値が制限値です。展開後読み込み量 (Post-expand include size) などに関しては、計上された数値(/の前)が制限値(/の後)に近ければ、読み込まれなかったテンプレートがある可能性があります。呼び込まれなかったテンプレートがある場合、この旨を伝えるエラーメッセージがHTMLソース中に表示されます。またいずれかの制限値が上限を越えていると、プレビュー画面でそれぞれに応じた警告が表示されます。
読み込み制限の仕組み
編集解析の過程で使われる制限には、「プリプロセッサ・ノード数 (Preprocessor node count) 」、「展開後読み込み量」、「テンプレート引数量 (Template argument size) 」、「高負荷条件文関数使用回数 (Expensive parser function count) 」の4種があります。
プリプロセッサ・ノード数
編集「プリプロセッサ・ノード数」のカウンターは新プリプロセッサから採用されました。これは、データの量ではなく、ページの複雑性を計測しています。解析によってページが展開される時には、HTMLの構造に対応する「ツリー」と呼ばれるデータ構造を生成しますが、このツリーのノードの数を計るものです。このカウンターが制限値を越えると、解析が中止され、生成HTMLページ中に "Node-count limit exceeded" のエラーメッセージを生成します。ノード数にはテンプレートだけでなく、リンク、セクション見出し、HTML要素などがすべて計上されています。
展開後読み込み量
編集{{foo}}
の内容に {{b
ar}}
が含まれている場合、 {{foo}}
を複数回呼び出しても、{{bar}}
は1回分だけ計上され、その後は{{foo}}
をフル展開した分だけが展開後読み込み量に計上されます。一方、 {
{foo|引数}}
の形で複数回呼び出した場合、たとえ引数が同じであっても、呼び出しの度に {{bar}}
の展開量も計上されます。
なお、条件文を用いたテンプレートの実行されない部分は展開されません。例えば、{{#if:yes|{{bar}}|{{foo}} }
}
というコードがあったとすると、テンプレート {{bar}} は展開され、テンプレート {{foo}} は展開されません。ただし、最終的な出力結果には表れないテンプレートの引数が展開後読み込み量に計上されることがあります。例えば {{#if:{{foo}}|
yes|no}}
というコードがあったとすると、解析の際に条件文の決定のためにテンプレート {{foo}} の展開が必要なため、 {{foo}} の展開量が展開後カウンターに計上されます。
ちなみに新プリプロセッサの導入前は、テンプレートの展開前のデータ量も計測しており、これがテンプレートの制限でもっとも問題になっていました。
テンプレート引数量
編集「テンプレート引数量」カウンターは、代入されるテンプレート変数の引数を計上します。
制限値を越えると引数が無視され、ページは自動的にCategory:省略されたテンプレート引数を含むページに追加されます。
高負荷構文解析関数使用回数
編集制限内でやりくりするには
編集{{
#if:test|{{template1}}|{{templat
e2}} }}
を {{ {{#if:test|template
1|template2}} }}
に変える︶。
複雑なテンプレートについてはLuaで書きなおすことで改善される可能性があります。
これでも解決しない場合、テンプレート呼び出しではなく、ページ本体に直接記述するデータを増やすことを考えてみてください。その際には特別ページのテンプレートを展開が利用できます。
また、出典数の多い他言語の記事を翻訳した際に﹁エラー: #time の呼び出しが多すぎます﹂という警告文が表示されることがあります。これは{{cite web}}などで使用される引数のaccessdateやdateが "September 10, 2017" のようにベタ打ち入力されていると、日本語版ではYYYY-MM-DD形式に自動で変換し、テンプレートの読み込み制限を超過してしまうためです。日付をYYYY-MM-DD形式に変更するか、別の出典用テンプレートを活用することでエラーを回避できます。
参考情報
編集- 開発者による wikipedia-l への制限値導入のアナウンス(英語)
- Village pump technical - 英語版における制限値などを巡っての議論
- en:Wikipedia talk:Template limits - 英語版における制限値などを巡っての議論