stringtranslate.com

Ayuda: límites de plantilla

El software MediaWiki que impulsa Wikipedia tiene varios parámetros que limitan la complejidad de una página y la cantidad de datos que se pueden incluir. Estos límites se refieren principalmente a datos que se transcluyen o sustituyen durante la expansión de una página, a diferencia de los datos directamente en la fuente de la página misma. Esta página explica cómo y por qué se aplican estos límites y cómo los usuarios pueden trabajar dentro de los límites.

Fondo

¿De qué se trata esto?

El software MediaWiki , que genera el HTML de una página a partir de su fuente wiki, utiliza un analizador para procesar los datos incluidos. Esto se hace usando un "preprocesador" que convierte el wikitexto en una estructura de datos conocida como árbol XML, y luego usa este árbol para producir wikitexto "expandido", donde las estructuras de doble y triple refuerzo se reemplazan por su resultado.

Durante el proceso de conversión, el software utiliza varios contadores para rastrear la complejidad de la página que se genera. Cuando comienza el análisis de una página, estos contadores se establecen en cero, pero se incrementan durante el proceso de análisis, como se describe a continuación. Hay límites superiores en estos contadores y el analizador no permite que se excedan estos límites.

¿Por qué hay límites?

Las páginas muy largas o complicadas tardan en analizarse . Esto no sólo es un inconveniente para los usuarios, sino que también puede usarse para montar un ataque de denegación de servicio (DoS) en los servidores, en el que una solicitud de página obliga al software MediaWiki a analizar una cantidad excesiva de datos. Los límites ayudan a prevenir este tipo de ataques y garantizan que las páginas se muestren en un tiempo razonable. (Sin embargo, a veces una página compleja dentro de los límites genera un error de tiempo de espera; esto depende de qué tan ocupados estén los servidores).

Trabajando dentro de los límites

Cuando una página alcanza los límites de la plantilla, la solución más común es acortar las plantillas, utilizando los métodos que se describen a continuación. Si esto no es posible, puede ser necesario incluir más datos directamente en la fuente de la página, en lugar de transcluirlos de las plantillas (por ejemplo, formatear las referencias a mano o usar <references />en lugar de {{ Reflist }}). Por otro lado, una plantilla puede ayudar al servidor a evitar realizar trabajos duplicados, ver más abajo.

¿Cuándo surgen los problemas?

The inclusion limits are most commonly reached on pages that use the same template many times, for example using one transclusion per row of a long table. Even though the amount of data that the template adds to the final page may be small, it is counted each time the template is used, and so the limit may be encountered sooner than expected. Pages that only include a few dozen templates are unlikely to exceed the inclusion limits, unless these templates themselves include a lot of data.

How can you find out?

Once the page body is processed, an HTML comment is added towards the end of the HTML code of the page with the final values of the various counters. For example, the page HIV/AIDS (on January 1, 2024) contains the following comment in its generated HTML source:

<!--NewPP limit reportParsed by mw1416Cached time: 20231227101515Cache expiry: 2592000Reduced expiry: falseComplications: [vary‐revision‐sha1, show‐toc]CPU time usage: 2.767 secondsReal time usage: 3.151 secondsPreprocessor visited node count: 20971/1000000Post‐expand include size: 928915/2097152 bytesTemplate argument size: 9264/2097152 bytesHighest expansion depth: 15/100Expensive parser function count: 51/500Unstrip recursion depth: 1/20Unstrip post‐expand size: 1121339/5000000 bytesLua time usage: 1.705/10.000 secondsLua memory usage: 10566120/52428800 bytesLua Profile: MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::preprocess 180 ms 10.6%  ? 160 ms 9.4% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::callParserFunction 140 ms 8.2% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::plain 140 ms 8.2% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::gsub 80 ms 4.7% MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::find 80 ms 4.7% dataWrapper <mw.lua:672> 80 ms 4.7% select_one <Module:Citation/CS1/Utilities:426> 80 ms 4.7% recursiveClone <mwInit.lua:41> 80 ms 4.7% <mwInit.lua:41> 60 ms 3.5% [others] 620 ms 36.5%Number of Wikibase entities loaded: 0/400-->

(Es posible que algunos elementos no estén presentes en otros wikis, según las extensiones que hayan instalado; por ejemplo, los elementos "Lua" los agrega la Extensión:Scribunto).

Debido a la forma en que se aumentan los contadores, el recuento de nodos visitados por el preprocesador, el tamaño de inclusión posterior a la expansión y el tamaño de los argumentos de la plantilla generalmente serán menores que sus límites. Si alguno de estos elementos está cerca de su límite, es probable que algunas de las plantillas no se hayan ampliado. Cada aparición de una plantilla no expandida se identifica en el cuerpo de la página mediante un comentario HTML que contiene un mensaje de error.

Haga clic en "Datos de perfil del analizador" en la parte inferior de una vista previa para ver datos similares para la vista previa sin guardarlos.

Expansión

Las plantillas en ramas no ejecutadas de funciones del analizador condicional no se expanden y, por lo tanto, no se cuentan. Por ejemplo, en el código {{#if:yes|{{bar}}|{{foo}}}}, la plantilla {{bar}}se expande, pero la plantilla {{foo}}no se expande. Sin embargo, es posible que un argumento de plantilla contribuya a los recuentos aunque no aparezca en el resultado final. Por ejemplo, si se analiza el código {{#if:{{foo}}|yes|no}}, la longitud de la versión expandida de la plantilla {{foo}}se agregará al contador posterior a la expansión, porque esa plantilla debe expandirse para decidir qué rama del condicional se debe seleccionar.

Recuento de nodos del preprocesador

El recuento de nodos del preprocesador mide la complejidad de la página (no el volumen de datos). A medida que el analizador expande una página, crea una estructura de datos conocida como árbol que corresponde a la estructura HTML de la página. Cada nodo del árbol que se visita durante la expansión se cuenta en el recuento de nodos del preprocesador. Si se excede este recuento, el analizador cancelará el análisis y mostrará el error "Se excedió el límite de recuento de nodos" visible en el HTML generado.

El recuento comienza con 1 para texto sin formato. Un par de etiquetas nowiki cuenta por 3, un encabezado por 2, etc. Un enlace no contribuye al recuento. Para la expansión de #switchcada condición marcada se suma 2 a la cuenta. En el caso de múltiples expansiones de la misma plantilla, el contenido de una plantilla sin argumentos cuenta solo una vez, pero el de una plantilla con argumentos (incluso si es constante) cuenta varias veces. En contraste con esto, el resultado de una expansión se puede usar varias veces contando solo una vez si se asigna a un parámetro de plantilla, y esa plantilla tiene múltiples usos de este parámetro.

Las páginas que exceden este límite se clasifican automáticamente en Categoría:Páginas donde se excede el recuento de nodos (adiciones recientes).

Tamaño de inclusión posterior a la expansión

  • WP:PEIS

El tamaño de inclusión posterior a la expansión es la suma de las longitudes de los wikitextos expandidos generados por plantillas, funciones de analizador y variables. Siempre que el código fuente de una página indica al analizador que expanda una plantilla, etc. (es decir, que la reemplace mediante transclusión o sustitución), el analizador suma la longitud del wikitexto expandido generado por la plantilla, etc. y el código fuente actual. valor del contador de la página. Si esta suma es mayor que el límite posterior a la expansión (igual que el límite de tamaño máximo del artículo ), la plantilla inicial, etc. no se reemplaza y se agrega un mensaje de error como comentario en el HTML de salida. De lo contrario, el contador posterior a la expansión aumenta al nuevo valor y el análisis continúa. Una plantilla que se expande más de una vez en la página contribuye más de una vez a su tamaño de inclusión posterior a la expansión.

Las invocaciones de plantillas sin argumentos tienen una caché de texto expandida. Entonces, si {{foo}}incluye la metaplantilla de segundo nivel {{bar}}, múltiples invocaciones de {{foo}}solo incrementarán el tamaño de inclusión posterior a la expansión para la plantilla completamente expandida {{foo}}; la inclusión secundaria {{bar}}solo se cuenta una vez. Pero si incluyó la misma plantilla varias veces con {{foo|arg}}, las plantillas secundarias se cuentan cada vez, incluso si el argumento es el mismo.

Las páginas que exceden el límite de tamaño de inclusión posterior a la expansión se agregan automáticamente a Categoría:Páginas donde se excede el tamaño de inclusión posterior a la expansión (adiciones recientes).Plantilla: las citas que no cumplan con el límite PEIS se pueden agregar manualmente a la página cuando las citas o las plantillas no se cumplan como resultado del problema. Véase también phab:T189108.

Usando comentarios, no incluir y solo incluir

Sólo los datos que sobreviven a la etapa de expansión del preprocesador se cuentan para el contador posterior a la expansión. La longitud de los comentarios HTML en el wikitexto (que no se reproducen en la fuente HTML producida) no se incluye en el contador posterior a la expansión. El código que está dentro de una sección <noinclude> o fuera de una sección <onlyinclude> no se expande, por lo que estas secciones no contribuyen al tamaño posterior a la expansión. Esto también significa que las etiquetas de categoría solo contribuyen si están incluidas (para categorizar páginas llamando a la plantilla).

Transclusiones anidadas

Tenga en cuenta que se agregan los tamaños de los wikitextos de todas las plantillas expandidas y funciones del analizador, incluso en el caso de anidamiento (ver phab:T15260), por lo que los niveles adicionales aumentan el recuento. Si la página A transcluye B y B no hace más que transcluir C, entonces el tamaño de C se contará dos veces para el tamaño de inclusión posterior a la expansión en la página A, y de manera similar si una plantilla consta de una llamada a la función del analizador, o si una función del analizador tiene una llamada de plantilla como parámetro, etc. Las posibles sustituciones para reducir el anidamiento incluyen:

Transclusiones no renderizadas

Las transclusiones no renderizadas todavía cuentan para el límite. Por ejemplo, una página que contiene solo {{#if:{{:Main Page}}}}todavía tendría un tamaño de inclusión posterior a la expansión aunque no tuviera ningún resultado.

Lo mismo se aplica a los módulos de Scribonto . Por ejemplo, {{#invoke:Test|main}}seguiría aumentando el tamaño de inclusión posterior a la expansión incluso si Módulo:Prueba fuera simplemente:

mw . getCurrentFrame (): preproceso '{{msgnw::Main Page}}'  - elimina esta línea y el tamaño de inclusión posterior a la expansión se vuelve cero return  {  main  =  function ()  end  }  - p.main() no tiene valor de retorno

#invocar sintaxis

Algunas plantillas tienen módulos Lua equivalentes, que pueden incluirse con la sintaxis . Esto tiene un PEIS más bajo que el uso de plantillas que envuelven ese módulo Lua. Sin embargo, si se usa directamente en artículos, existe un costo para la legibilidad (y edición) del código fuente del artículo, por lo que se desaconseja a menos que sea estrictamente necesario. Éstas incluyen:#invoke:module name

Referencias

Las páginas pueden exceder el límite al intentar mostrar referencias usando la plantilla {{ reflist }}. Reemplazarlo con <references />puede permitir que aparezcan las referencias, aunque la lista puede truncarse si plantillas como {{ cite web }} exceden el límite. A partir de 2010, la etiqueta tiene el mismo estilo de fuente que {{ reflist }} y, a partir de 2017, permite columnas responsivas.

Dividir artículos

Lo ideal sería que la extensión de los artículos estuviera determinada por decisiones relacionadas con el contenido, no por cuestiones técnicas. Sin embargo, si los problemas de PEIS no se pueden resolver en un artículo, como una lista larga, se puede dividir en secciones, cada una de las cuales se ajusta al límite, siguiendo la política en WP:SPLIT .

Tamaño del argumento de la plantilla

El contador del tamaño de los argumentos de la plantilla realiza un seguimiento de la longitud total de los argumentos de la plantilla que se han sustituido. Su límite es el mismo que el límite de tamaño del artículo .

Ejemplo:

{{3x|{{2x|abcde}}}}tiene un tamaño de argumento de plantilla de 40 bytes: el argumento abcdeabcdese cuenta 3 veces, el argumento abcdedos veces.

Los argumentos en la llamada de plantilla que no coinciden con ninguna etiqueta de parámetro en la plantilla no cuentan.

Si una plantilla contiene un modificador, el uso de argumentos de plantilla más allá de una coincidencia no cuenta. Hasta el caso coincidente inclusive, los argumentos de plantilla utilizados a la izquierda de los signos igual cuentan dos veces. Los que están a la derecha del signo igual cuentan sólo para el caso coincidente.

Las páginas que exceden el límite de tamaño de argumentos de la plantilla se agregan automáticamente a Categoría:Páginas que contienen argumentos de plantilla omitidos (adiciones recientes).

Mayor profundidad de expansión

Las páginas que exceden este límite se clasifican automáticamente en Categoría:Páginas donde se excede la profundidad de expansión (adiciones recientes).

Llamadas costosas a funciones de analizador

  • WP: CARO

Hay un límite de 500 para el recuento de funciones costosas del analizador , es decir, el número de llamadas de funciones costosas del analizador, que son:

También es posible incrementar manualmente el costoso recuento de funciones del analizador desde un módulo Lua utilizando mw.incrementExpensiveFunctionCount.

Las páginas que superan este límite se clasifican automáticamente en Categoría:Páginas con demasiadas llamadas a funciones de analizador costosas (adiciones recientes).

Ver también: mw:Manual:$wgExpensiveParserFunctionLimit, Plantilla:Caro

#tiempo

La longitud total de las cadenas de formato de función #timeestá limitada a 6000 caracteres [1]. El mensaje de error lo proporciona MediaWiki: Pfunc time too long ). Para cada combinación del wikitexto expandido de una cadena de formato y el wikitexto expandido de una expresión para ese momento (por ejemplo, "1 de marzo de 2008 -1 día"), el uso repetido no se cuenta, ya que los resultados se almacenan en caché.

Lamentablemente, el recuento no figura en el informe de límites.

Especial: ampliar plantillas

Cuando una página excede los límites, una forma sencilla de resolver el problema es usar Special:ExpandTemplates . A diferencia de la sustitución , expande recursivamente todos los niveles a la vez, sin necesidad de preparar especialmente las plantillas con el código safesubst:<noinclude/>o similar (ver error 2777). Esto reduce todos los recuentos a cero, excepto el recuento de nodos del preprocesador, pero incluso eso normalmente se reducirá a un número que está dentro del límite.

Historia

Tim Starling puso en vigor los límites de inclusión en la Wikipedia en inglés el 14 de agosto de 2006. En enero de 2008 se habilitó un nuevo preprocesador, que eliminó el "límite de inclusión previo a la expansión" y lo reemplazó con un límite de "recuento de nodos del preprocesador".

La práctica de utilizar una página de documentación de plantilla, si bien puede seguir siendo útil por otros motivos, ya no es necesaria para evitar que la documentación se cuente en las páginas que llaman a la plantilla.

Referencias