Википедия:Пределы шаблонов


В MediaWiki есть несколько параметров, которые задают пределы сложности страниц и количества включаемой в страницу информации. Эти пределы касаются в основном той информации, которая включается в страницу через механизм раскрытия шаблонов или методом подстановки содержимого шаблонов во время формирования страницы, и почти не затрагивают те данные, которые содержатся в собственно загружаемой странице. На этой странице рассказывается, как работают и зачем нужны эти пределы, и что делать, чтобы не превышать их.

Движок MediaWiki, который генерирует итоговый HTML-код страницы на базе вики-текста, использует парсер для анализа включенных данных. Всё это происходит в «препроцессоре», который конвертирует вики-текст в структуру данных, подобную XML-дереву, а затем использует эту структуру для генерирования «раскрытого» вики-текста, в котором структуры из двойных и тройных скобок заменяются их результатом.

В процессе преобразования движок использует несколько счётчиков, которые анализируют сложность генерирования страницы. Когда начинается синтаксический анализ (парсинг) страницы, эти счётчики устанавливаются в нуль, но в процессе анализа постепенно повышают свои значения, как это описано ниже. Каждый счётчик имеет верхний предел, при достижении которого парсер перестаёт обрабатывать тот тип данных, для которого предел превышен.

Слишком длинные и сложные страницы могут генерироваться значительное время. Кроме того, что этот недостаток может доставлять неудобства для пользователей, его можно использовать в качестве инструмента для DoS-атак на серверы, в ходе которых запросы к сложным страницам заставляют движок MediaWiki обрабатывать несоразмерно огромное количество данных. Эти пределы помогают предотвратить DoS-атаки и уменьшить время генерирования запрошенных страниц.

Если страница всё-таки достигла пределов для шаблонов, наиболее приемлемым выходом является упрощение самих шаблонов, которого можно добиться используя изложенные ниже методы. Если это невозможно, альтернативным решением проблемы может быть внесение информации прямо в текст страницы, вместо включения этой информации из шаблона. С другой стороны, шаблоны могут, наоборот, избежать повторения парсером однообразных задач, об этом ниже.

Превышение пределов возможно на тех страницах, в которых многократно используются одни и те же шаблоны, например, по одному включению на каждую строку длинной таблицы. Несмотря на то, что сам шаблон может вносить в итоговую страницу незначительный объем данных, весь объём данных, используемый шаблоном, будет считаться при каждом его включении и, таким образом, предел счётчика может быть превышен ранее, чем можно ожидать. Страницы, которые включают лишь незначительное количество шаблонов, практически никогда не превышают эти пределы, исключением могут быть случаи, когда сами шаблоны содержат огромное количество данных.