stringtranslate.com

Ayuda: Límites de plantillas

El software MediaWiki que alimenta 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 afectan principalmente a los datos que se incorporan o sustituyen durante la expansión de una página, a diferencia de los datos que se encuentran directamente en el código fuente de la página en sí. Esta página explica cómo y por qué se aplican estos límites, y cómo los usuarios pueden trabajar dentro de ellos.

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 mediante un "preprocesador" que convierte el wikitexto en una estructura de datos conocida como árbol XML y luego utiliza este árbol para producir un wikitexto "expandido", donde las estructuras con dobles y triples llaves se reemplazan por su resultado.

Durante el proceso de conversión, el software utiliza varios contadores para realizar un seguimiento de la complejidad de la página que se está generando. Cuando comienza el análisis de una página, estos contadores se ponen a cero, pero se incrementan durante el proceso de análisis, como se describe a continuación. Estos contadores tienen límites superiores y el analizador no permite que se superen.

¿Por qué hay límites?

Las páginas muy largas o complicadas tardan mucho en analizarse . Esto no sólo es un inconveniente para los usuarios, sino que también puede utilizarse para lanzar un ataque de denegación de servicio (DoS) en los servidores, en el que una solicitud de página obliga al software de MediaWiki a analizar una cantidad de datos irrazonablemente grande. 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 da un error de tiempo de espera; esto depende de lo ocupados que 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 acortarlas, utilizando los métodos que se describen a continuación. Si esto no es posible, puede ser necesario incluir más datos directamente en el código fuente de la página, en lugar de incluirlos desde las plantillas (por ejemplo, formateando las referencias a mano o utilizando <references />en lugar de {{ Reflist }} ). Por otro lado, una plantilla puede ayudar al servidor a evitar realizar trabajo duplicado, consulte a continuación.

¿Cuando surgen los problemas?

Los límites de inclusión se alcanzan con mayor frecuencia en páginas que utilizan la misma plantilla muchas veces, por ejemplo, utilizando una transclusión por fila de una tabla larga. Aunque la cantidad de datos que la plantilla agrega a la página final puede ser pequeña, se contabiliza cada vez que se utiliza la plantilla, por lo que el límite puede alcanzarse antes de lo esperado. Es poco probable que las páginas que solo incluyen unas pocas docenas de plantillas excedan los límites de inclusión, a menos que estas plantillas incluyan una gran cantidad de datos.

¿Cómo puedes saberlo?

Una vez procesado el cuerpo de la página, se añade un comentario HTML hacia el final del código HTML de la página con los valores finales de los distintos contadores. Por ejemplo, la página VIH/SIDA (el 1 de enero de 2024) contiene el siguiente comentario en su código HTML generado:

<!-- Informe de límite de NewPP Analizado por mw1416 Tiempo en caché: 20231227101515 Caducidad de caché: 2592000 Caducidad reducida: false Complicaciones: [vary‐revision‐sha1, show‐toc] Uso del tiempo de CPU: 2,767 segundos Uso en tiempo real: 3,151 segundos Recuento de nodos visitados por el preprocesador: 20971/1000000 Tamaño de inclusión posterior a la expansión: 928915/2097152 bytes Tamaño del argumento de plantilla: 9264/2097152 bytes Profundidad de expansión más alta: 15/100 Recuento de funciones del analizador costoso: 51/500 Profundidad de recursión de desmantelamiento: 1/20 Tamaño posterior a la expansión de desmantelamiento: 1121339/5000000 bytes Tiempo de Lua uso: 1.705/10.000 segundos Uso de memoria Lua: 10566120/52428800 bytes Perfil de Lua:  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 <Módulo:Cita/CS1/Utilities:426> 80 ms 4,7 %  recursiveClone <mwInit.lua:41> 80 ms 4,7 %  <mwInit.lua:41> 60 ms 3,5 %  [otros] 620 ms 36,5 % Número de entidades de Wikibase cargadas: 0/400 -->

(Algunos elementos pueden no estar presentes en otras wikis, dependiendo de qué extensiones tengan instaladas; por ejemplo, los elementos "Lua" son agregados por Extensión:Scribunto).

Debido a la forma en que se incrementan 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 del argumento de 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 expandido. 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 a la vista previa sin guardarla.

Expansión

Las plantillas en ramas no ejecutadas de funciones de análisis 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 la salida final. Por ejemplo, si {{#if:{{foo}}|yes|no}}se analiza el código, 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 debe seleccionarse.

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 contabiliza en el recuento de nodos del preprocesador. Si se excede este recuento, el analizador interrumpirá el análisis y aparecerá el error "Se excedió el límite de recuento de nodos" en el HTML generado.

El recuento comienza con 1 para texto simple. Un par de etiquetas nowiki cuentan como 3, un encabezado como 2, etc. Un enlace no contribuye al recuento. Para la expansión de #switchcada condición marcada, se agrega 2 al recuento. 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 son constantes) cuenta varias veces. En contraste con esto, el resultado de una expansión se puede usar varias veces mientras cuenta 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 número de nodos (adiciones recientes).

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

  • Página de inicio: 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 del analizador y variables. Siempre que el código fuente de una página le ordena al analizador que expanda una plantilla, etc. (es decir, que la reemplace por transclusión o sustitución), el analizador suma la longitud del wikitexto expandido generado por la plantilla, etc. y el valor del contador actual 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, etc. inicial 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 se incrementa 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 plantilla sin argumentos tienen un caché de texto expandido. Por lo tanto, si {{foo}}incluye la metaplantilla de segundo nivel {{bar}}, las invocaciones múltiples 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 la Categoría:Páginas en las que se excede el tamaño de inclusión posterior a la expansión (adiciones recientes). Plantilla:Las citas que no cumplen con el límite de PEIS se pueden agregar manualmente a la página cuando las citas o las plantillas se rompen como resultado del problema. Consulte también phab:T189108.

Uso de comentarios, noinclude y onlyinclude

Solo 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 el código fuente HTML producido) no se incluye en el contador posterior a la expansión. El código que se encuentra 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 se incluyen (para categorizar las páginas que llaman a la plantilla).

Transclusiones anidadas

Tenga en cuenta que se suman los tamaños de los wikitextos de todas las plantillas expandidas y funciones de análisis, incluso en el caso de anidación (consulte phab:T15260), por lo que los niveles adicionales aumentan el recuento. Si la página A transcluye B y B no hace nada 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 una función de análisis, o una función de análisis tiene una llamada a una plantilla como parámetro, etc. Las posibles sustituciones para reducir la anidación incluyen:

Transclusiones no renderizadas

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

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

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

Sintaxis #invoke

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

Referencias

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

División de artículos

Lo ideal sería que la extensión de los artículos se determinara en función de decisiones relacionadas con el contenido, no de 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 que se ajusten al límite, siguiendo la política de WP:SPLIT .

Tamaño del argumento de plantilla

El contador de tamaño de argumento de plantilla registra la longitud total de los argumentos de 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 del signo igual cuentan dos veces. Los que están a la derecha del signo igual cuentan solo para el caso coincidente.

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

Máxima 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 del analizador

  • WP:CARO

Hay un límite de 500 para el recuento de funciones de analizador costoso , es decir, la cantidad de llamadas a funciones de analizador costoso, 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 exceden 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:Expensive

Desmontar el tamaño posterior a la expansión

El contador de tamaño posterior a la expansión desmantelada rastrea la cantidad total de bytes agregados a través de TemplateStyles (la <templatestyles />etiqueta en sí se cuenta para el recuento de tamaño de inclusión posterior a la expansión).

#tiempo

La longitud total de las cadenas de formato de una función #timeestá limitada a 6000 caracteres [1]. El mensaje de error lo da 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 la hora (por ejemplo, "1 de marzo de 2008 -1 día"), no se cuenta el uso repetido, ya que los resultados se almacenan en caché.

Desafortunadamente, el recuento no está en el informe de límites.

Especial:Expandir plantillas

Cuando una página excede los límites, una forma rudimentaria de resolver el problema es usar Special:ExpandTemplates . A diferencia de la sustitución, expande recursivamente todos los niveles a la vez, sin la necesidad de preparar especialmente las plantillas con el código safesubst:<noinclude/>o algo similar (consulte el 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

Los límites de inclusión fueron implementados en la Wikipedia en inglés por Tim Starling el 14 de agosto de 2006. Se habilitó un nuevo preprocesador en enero de 2008, eliminando el "límite de inclusión de preexpansión" y reemplazándolo con un límite de "número de nodos del preprocesador".

La práctica de utilizar una página de documentación de plantilla, si bien todavía puede ser ú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