Página semiprotejada
De Wikipedia, la enciclopedia libre
Ir a navegaciónSaltar a buscar

El software MediaWiki que impulsa a 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 los datos que se transfieren o sustituyen durante la expansión de una página, a diferencia de los datos directamente en el origen de la página. 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 tratar 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 dobles y triples son reemplazadas por su resultado.

Durante el proceso de conversión, el software utiliza varios contadores para rastrear la complejidad de la página que se está generando. 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 son lentas de analizar . Esto no solo es un inconveniente para los usuarios, sino que también se puede utilizar 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 de datos irrazonablemente grande. Los límites ayudan a prevenir este tipo de ataque y garantizan que las páginas se procesen 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 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 que sea necesario incluir más datos directamente en la fuente de la página, en lugar de trasladarlos de las plantillas (p. Ej., Formatear las referencias a mano o usar <referencias /> en lugar de {{Lista de referencias}}). Por otro lado, una plantilla puede ayudar al servidor a evitar realizar trabajos duplicados, consulte a continuación.

¿Cuándo surgen los problemas?

Los límites de inclusión se alcanzan con mayor frecuencia en páginas que usan la misma plantilla muchas veces, por ejemplo, usando una transclusión por fila de una tabla larga. Aunque la cantidad de datos que agrega la plantilla a la página final puede ser pequeña, se cuenta cada vez que se usa la plantilla, por lo que el límite puede encontrarse 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 averiguarlo?

Una vez que se procesa el cuerpo de la página, se agrega 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 8 de agosto de 2012) contiene el siguiente comentario en su fuente HTML generada:

<! - Nuevo informe de límite de PP Recuento de nodos de preprocesador: 173488/1000000 Tamaño de inclusión posterior a la expansión: 1557895/2048000 bytes Tamaño de argumento de plantilla: 561438/2048000 bytes Profundidad de expansión más alta: 29/40 Recuento de funciones de analizador costoso: 7/500 ->

(En wikis con un espacio de nombres de módulo, los elementos "Uso de tiempo de Lua" y "Uso de memoria de Lua" se agregan a esta lista).

Debido a la forma en que se aumentan los contadores, los primeros tres recuentos generalmente serán menores que los límites. Si alguno de estos tamaños se acerca al 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.

Actualización 1 de abril de 2013:

<! - Nuevo informe de límite de PP Recuento de nodos visitados por el preprocesador: 19190/1000000 Recuento de nodos generados por el preprocesador: 94558/1500000 Tamaño de inclusión posterior a la expansión: 714878/2048000 bytes Tamaño del argumento de plantilla: 25507/2048000 bytes Profundidad de expansión más alta : 13/40 Analizador caro recuento de funciones: 13/500 uso de tiempo Lua: 0.331s uso de memoria Lua: 1.25 MB ->

Haga clic en "Datos de creación de perfiles 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 de 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. No obstante, es posible que un argumento de plantilla contribuya a los recuentos aunque no aparezca en el resultado 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 de preprocesador

El recuento de nodos del preprocesador mide la complejidad de la página (no el volumen de datos). A medida que el analizador está expandiendo 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 para el recuento de nodos del preprocesador. Si se excede este recuento, el analizador abortará el análisis con el error "Límite de recuento de nodos excedido" visible en el HTML generado.

El recuento comienza con 1 para texto sin formato. Un par de etiquetas nowiki cuentan por 3, un encabezado por 2, etc. Un enlace no contribuye al conteo. Para la expansión de #switchcada condición marcada se suma 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 es constante) cuenta varias veces. En contraste con esto, el resultado de una expansión se puede usar varias veces mientras se cuenta solo una vez si está asignado a un parámetro de plantilla, y esa plantilla tiene múltiples usos de este parámetro.

Las páginas que superan este límite se clasifican automáticamente en Categoría: páginas en las que se supera el número de nodos ( adiciones recientes ).

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

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

Las páginas que superan el límite de tamaño de inclusión posterior a la expansión se agregan automáticamente a 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.

Usando comentarios, noinclude y soloinclude

Solo los datos que sobreviven a la etapa de expansión del preprocesador se cuentan para el contador de expansión posterior. La longitud de los comentarios HTML en el wikitexto (que no se reproducen en la fuente HTML producida) no se incluye en el contador de expansión posterior. 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 las páginas que llaman a la plantilla).

Transclusiones anidadas

Tenga en cuenta que los tamaños de los wikitextos de todas las plantillas expandidas y las funciones del analizador se agregan, incluso en el caso de anidamiento (ver bugzilla 13260 ), 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 la función del analizador, o una función del analizador tiene una llamada de plantilla como parámetro, etc. Esto a veces se puede mitigar dejando que la función del analizador produzca un nombre de plantilla en lugar de un resultado de plantilla, por ejemplo, reemplazando

{{#if:{{{test|}}}|{{template1}}|{{template2}} }}

con

{{ {{#if:{{{test|}}}|template1|template2}} }}.

Transclusiones no renderizadas

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

Lo mismo se aplica a los módulos Scribunto . Por ejemplo, {{#invoke:Test|main}}aún aumentaría el tamaño de inclusión posterior a la expansión incluso si Module: Test 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

Tamaño del argumento de la plantilla

El contador de tamaño de argumento de plantilla realiza un seguimiento de 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 la 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 iguales cuentan dos veces. Aquellos 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 la plantilla se agregan automáticamente a Categoría: Páginas que contienen argumentos de plantilla omitidos ( adiciones recientes ).

Profundidad de expansión más alta

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

Llamadas costosas a la función del analizador

Atajo
  • WP: CARO

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

  • #ifexist - ramificación dependiendo de si existe una página en particular. Si se excede el límite de este contador, las llamadas #ifexist adicionales actuarán como si las páginas que consultan no existieran.
  • PAGESINCATEGORY o PAGESINCAT
  • TAMAÑO DE PÁGINA
  • FUENTES DE CASCADA
  • REVISIONUSER, cuando se usa en una página diferente a la página actual
  • REVISIONTIMESTAMP, cuando se usa en una página que no sea la página actual
  • Algunas funciones de Lua , muchas equivalentes a otros elementos de esta lista:
    • mw.site.stats.pagesInCategory
    • Algunas propiedades y métodos del objeto de título

También es posible incrementar manualmente el costoso recuento de funciones del analizador desde un módulo Lua usando 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 ).

Véase 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] . MediaWiki da el mensaje de error : 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 el 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é.

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

Especial: Expandir plantillas

Cuando una página excede los límites, una forma burda 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:}}}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 se encuentre 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, eliminando el "límite de inclusión previo a la expansión" y reemplazándolo por un límite de "recuento de nodos del preprocesador".

La práctica de usar una página de documentación de plantilla, aunque puede ser útil por otras razones, ya no es necesaria para evitar que la documentación se cuente en las páginas que llaman a la plantilla.

Referencias