Gostaria de sugerir a adição de uma profundidade máxima de aninhamento para o recurso integrado [details], ou a introdução de uma configuração do site que permita aos administradores configurar esse limite.
O problema
Recentemente, um usuário no meu fórum Discourse criou uma publicação contendo 24 níveis de seções [details] aninhadas.
Isso causou vários problemas:
- Desempenho do navegador: Os usuários relataram que expandir múltiplos níveis fazia o Firefox ficar extremamente lento ou sem resposta.
- Tempo limite do endpoint Markdown: O acesso ao endpoint
.mddo tópico ficou extremamente lento. Observamos requisições levando 19,8 segundos e 31,1 segundos. - Erros no servidor: O endpoint Markdown às vezes retornava uma página de erro “Oops”. Os logs do Discourse também mostravam avisos de tempo limite do worker Pitchfork durante a conversão para Markdown.
- Possível esgotamento de recursos: Como mecanismos de busca e rastreadores de IA solicitam endpoints
.mdcom frequência, uma publicação profundamente aninhada poderia disparar repetidamente processamentos custosos e consumir recursos do servidor.
Após remover a publicação problemática, o endpoint Markdown retornou HTTP 200 e respondeu em aproximadamente 1,7 segundos.
O tópico afetado foi:
https://meta.appinn.net/t/topic/87672
(A resposta problemática já foi removida.)
Melhoria sugerida
Acho que seria útil:
- Limitar o aninhamento de
[details]a uma profundidade razoável, como 2 ou 3 níveis. - Adicionar uma configuração do site, como
details_max_nesting_depth, permitindo que os administradores configurem a profundidade máxima de aninhamento.
Para compatibilidade reversa, a configuração poderia ter o valor padrão de ilimitado, permitindo que os administradores imponham um limite quando necessário.
Se os usuários excederem o limite configurado, o Discourse poderia rejeitar a publicação com uma mensagem de validação clara.
Solução temporária: um plugin
Criei um pequeno plugin que limita o aninhamento de [details] a um máximo de 2 níveis:
GitHub - scavin/discourse-details-depth-limit · GitHub
O plugin valida as publicações no lado do servidor e rejeita publicações que contenham mais de dois níveis de seções recolhíveis aninhadas.
Testei com sucesso em meu ambiente de desenvolvimento local do Discourse.
Para administradores que enfrentam problemas semelhantes, este plugin pode servir como uma solução temporária até que uma solução oficial esteja disponível.
Acredito que um limite configurável no plugin Details integrado seria uma salvaguarda útil contra aninhamento acidental ou excessivo.
