Wikipédia:Limites técnicos

O software MediaWiki, utilizado pela Wikipédia, possui diversos parâmetros que limitam a complexidade de uma página e a quantidade de dados que podem ser inclusos nela. Esses limites estão quase todos relacionados ao volume de dados que podem ser inseridos através dos mecanismos de transclusão ou substituição de predefinições em uma página e, geralmente, não se aplicam aos dados inseridos diretamente no código-fonte da página. Esta página explica porque esses limites existem e como eles são aplicados, e dá instruções sobre como os usuários devem agir para conviver com tais limites.

Do que estamos falando? Que limites são esses? editar

O software MediaWiki gera código HTML a partir do código-fonte da página através de um analisador sintático que lida com os dados (este analisador sintático é conhecido como parser). Isso é feito por um "pré-processador" que converte o wikitexto em uma estrutura de dados conhecida como árvore XML e usa essa árvore para produzir wikitexto "expandido" a partir das estruturas envolvidas com duas ou três chaves, substituindo-as pelos seus respectivos resultados. Essas estruturas envolvidas com duas chaves são os elementos que conhecemos como predefinições (em inglês elas são conhecidas como templates).

Durante o processo de conversão, o software usa diversos contadores para contabilizar a complexidade da página que está sendo gerada. Quando a análise sintática da página é iniciada, esses contadores são todos zerados, mas eles são incrementados à medida que as estruturas são expandidas, conforme descrito abaixo. Existem limites superiores pré-definidos para esses contadores e o analisador sintático não permite que esses limites sejam excedidos.

Por que existem esses limites? editar

Páginas muito longas ou complicadas demoram mais para serem analisadas. Isso não é apenas inconveniente para os usuários, mas poderia ser utilizado para provocar ataques de negação de serviço nos servidores, forçando-os a processar imensas quantidades de dados. Esses limites ajudam a prevenir esse tipo de ataque e garantem que as páginas sejam renderizadas em um tempo razoável (No entanto, mesmo páginas complexas que estejam dentro dos limites podem produzir erros por exceder o limite de tempo (time-out), mas isso vai depender de como os servidores estão ocupados).

Quando os problemas aparecem? editar

A limites de inclusão são normalmente atingidos em página que utilizam uma mesma predefinição várias vezes (por exemplo, quando se utiliza uma transclusão em cada linha de uma tabela extensa). Embora o volume de dados inserido pela predefinição possa ser baixo, ele é contabilizado cada vez que a predefinição é utilizada, fazendo com que os limites possam ser atingidos antes do esperado. Páginas que incluem apenas algumas predefinições são menos susceptíveis a exceder os limites de transclusão, mas isso pode acontecer se as predefinições inserirem uma grande quantidade de dados (transcluir páginas inteiras pode causar esse problema).

Como eu descubro se um limite foi excedido? editar

Quando o corpo de uma página é processado, um comentário HTML é incluso no final do código da página com os valores finais dos contadores. Por exemplo, a página Vírus da imunodeficiência humana contém o seguinte comentário no código fonte HTML gerado (conteúdo extraído dessa edição, de 17 de novembro de 2014):

<!-- 
NewPP limit report
Parsed by mw1152
CPU time usage: 2.511 seconds
Real time usage: 2.798 seconds
Preprocessor visited node count: 41722/1000000
Preprocessor generated node count: 0/1500000
Post-expand include size: 240751/2097152 bytes
Template argument size: 119007/2097152 bytes
Highest expansion depth: 18/40
Expensive parser function count: 4/500
-->

(Se a página possuir scripts em Lua, os itens "Lua time usage" e "Lua memory usage" são inclusos nesse comentário.)

Por causa do modo como os contadores são incrementados, os contadores geralmente serão menores que os limites. Se algum dos contadores estiver próximo dos limites, então é bem provável que alguma predefinição não foi expandida. Cada ocorrência de uma predefinição não expandida é identificada no corpo da página com um comentário HTML contendo uma mensagem de erro, como pode ser observada nessa edição, de 16 de dezembro de 2014 da página do Clube de Regatas do Flamengo:

<a href="/wiki/Predefinição:Bloco_de_navegação" title="Predefinição:Bloco de navegação">
  Predefinição:Bloco de navegação
</a><!-- WARNING: template omitted, post-expand include size too large -->

Todas as páginas que possuem ao menos uma predefinição não expandida por exceder os limites descritos aqui são listadas na categoria: !Páginas com excesso de predefinições.

Convivendo com os limites editar

É importante considerar que os limites impostos sejam suficientes para compor a maioria dos artigos. Se uma página eventualmente atinge algum dos limites, convém determinar se o conteúdo inserido não está demasiadamente extenso e se não poderia ser dividido em artigos menores. Embora haja incentivo para que o conteúdo das páginas seja aperfeiçoado e apresente com detalhes o estado da arte daquele tópico, é preciso considerar que o tamanho das páginas pode afetar a experiência do usuário que visita a página, impedindo que ele visualize seu conteúdo corretamente.

Quando uma página atinge os limites estabelecidos para as predefinições, ela não exibe o conteúdo desejado corretamente e não há como impedir que isso ocorra sem fazer alterações na página ou nas predefinições que ela utiliza. Assim, de uma forma geral, a solução é reduzir o uso de predefinições ou diminuir o tamanho delas. Se isso não for possível, uma alternativa é incluir o conteúdo desejado diretamente no código-fonte da página, ao invés de transcluí-lo a partir de predefinições. Embora ambos os métodos possam ser empregados para solucionar o problema, é preciso lembrar que o uso de predefinições não é lesivo e, inclusive, pode ajudar o servidor a evitar trabalho redundante, logo uma análise técnica de cada caso pode ser requerida.

Em caso de dúvidas, contate um usuário experiente no café dos programadores.

Ver também editar