Aggiungere una profondità di annidamento massima per i dettagli comprimibili

Ciao @scavin, grazie per aver segnalato questo problema e per aver fornito i dettagli di riproduzione.

Ho indagato sul rallentamento dell’endpoint Markdown che hai descritto e ho identificato un problema in MarkdownEndpoint::CookedProcessor#replace_details: gli elementi <details> annidati venivano convertiti ripetutamente, causando un’elaborazione esponenziale.

Ho aperto una PR draft upstream con una correzione:

A otto livelli di annidamento, la correzione ha ridotto le conversioni ricorsive da 255 a 8, con un miglioramento delle prestazioni di circa 31 volte nel mio benchmark locale. La PR ha superato i controlli CI di GitHub iniziali.

Sto anche lavorando all’impostazione di sito details_max_nesting_depth da te proposta, all’interno del plugin Details integrato, utilizzando 0 per un’annidamento illimitato al fine di preservare il comportamento esistente. L’implementazione iniziale è stata scritta, ma i test di integrazione sono ancora in corso.

La correzione delle prestazioni risolve il problema di conversione Markdown lato server; il limite configurabile fornirebbe un’ulteriore misura di sicurezza, in particolare per le prestazioni lato browser.

Sarebbe gradito un feedback sull’impostazione proposta e su se sia preferibile includerla nella stessa PR o inviarla separatamente.

1 Mi Piace