为可折叠详情添加最大嵌套深度

你好 @scavin,感谢你的报告以及提供的复现细节。

我一直在调查你描述的 Markdown 端点变慢的问题,并在 MarkdownEndpoint::CookedProcessor#replace_details 中发现了一个问题:嵌套的 <details> 元素被反复转换,导致处理时间呈指数级增长。

我已在上游提交了一个包含修复方案的草稿 PR:

在八层嵌套的情况下,该修复将递归转换次数从 255 次减少到 8 次,在我的本地基准测试中实现了约 31 倍的提速。该 PR 已通过 GitHub CI 的初始检查。

同时,我也正在内置的 Details 插件中开发你提议的 details_max_nesting_depth 站点设置,使用 0 表示无限制嵌套,以保留现有行为。初始实现已经完成,但集成测试仍在进行中。

性能修复解决了服务器端的 Markdown 转换问题;可配置的深度限制将提供额外的保护,特别是针对浏览器端的性能。

欢迎你对该提议的设置提供反馈,并告知是将其包含在同一个 PR 中还是单独提交更好。

1 个赞