Vorrei suggerire di aggiungere una profondità massima di annidamento per la funzione integrata [details], oppure di introdurre un’impostazione del sito che consenta agli amministratori di configurare questo limite.
Il problema
Recentemente, un utente del mio forum Discourse ha creato un post contenente 24 livelli di sezioni [details] annidate.
Ciò ha causato diversi problemi:
- Prestazioni del browser: Gli utenti hanno segnalato che l’espansione di più livelli causava a Firefox di diventare estremamente lento o non reattivo.
- Timeout dell’endpoint Markdown: L’accesso all’endpoint
.mddel topic diventava estremamente lento. Abbiamo osservato richieste che richiedevano 19,8 secondi e 31,1 secondi. - Errori del server: L’endpoint Markdown a volte restituiva una pagina di errore “Oops”. I log di Discourse mostravano anche avvisi di timeout dei worker Pitchfork durante la conversione Markdown.
- Possibile esaurimento delle risorse: Poiché i motori di ricerca e i crawler AI richiedono frequentemente gli endpoint
.md, un post profondamente annidato potrebbe ripetutamente attivare elaborazioni costose e consumare risorse del server.
Dopo la rimozione del post problematico, l’endpoint Markdown ha restituito HTTP 200 e ha risposto in circa 1,7 secondi.
Il topic interessato era:
https://meta.appinn.net/t/topic/87672
(La risposta problematica è stata già rimossa.)
Miglioramento suggerito
Credo sarebbe utile:
- Limitare l’annidamento di
[details]a una profondità ragionevole, come 2 o 3 livelli. - Aggiungere un’impostazione del sito, come
details_max_nesting_depth, che consenta agli amministratori di configurare la profondità massima di annidamento.
Per la compatibilità retroattiva, l’impostazione potrebbe essere illimitata per impostazione predefinita, consentendo agli amministratori di applicare un limite quando necessario.
Se gli utenti superano il limite configurato, Discourse potrebbe rifiutare il post con un chiaro messaggio di validazione.
Soluzione temporanea: un plugin
Ho creato un piccolo plugin che limita l’annidamento di [details] a un massimo di 2 livelli:
GitHub - scavin/discourse-details-depth-limit · GitHub
Il plugin valida i post lato server e rifiuta i post contenenti più di due livelli di sezioni richiudibili annidate.
L’ho testato con successo nel mio ambiente di sviluppo Discourse locale.
Per gli amministratori che riscontrano problemi simili, questo plugin può servire come soluzione temporanea fino a quando non sarà disponibile una soluzione ufficiale.
Credo che un limite configurabile nel plugin Details integrato sarebbe una salvaguardia utile contro l’annidamento accidentale o eccessivo.
