إضافة حد أقصى للعمق المتداخل للتفاصيل القابلة للطي

مرحباً @scavin، شكراً لك على الإبلاغ عن هذه المشكلة وتوفير تفاصيل إعادة إنتاجها.

لقد كنت أبحث في بطء نقطة النهاية الخاصة بـ Markdown التي وصفتها، وحديت مشكلة في MarkdownEndpoint::CookedProcessor#replace_details: حيث كانت عناصر <details> المتداخلة تُحوَّل بشكل متكرر، مما أدى إلى معالجة أُسّية (exponential processing).

لقد فتحت طلب سحب (PR) مسودة (draft) على المنبع (upstream) يحتوي على الإصلاح:

عند مستوى تدخّل ثامن، قلّل الإصلاح عمليات التحويل التكرارية من 255 إلى 8، مع تحقيق تسريع يقارب 31 ضعفًا في اختباري المحلي للأداء. وقد اجتاز طلب السحب فحوصات GitHub CI الأولية.

أعمل أيضًا على إعداد الموقع المقترح من قِبلك details_max_nesting_depth داخل إضافة Details المدمجة، باستخدام 0 لـ عدم تحديد حد للتدخّل للحفاظ على السلوك الحالي. تم كتابة التنفيذ الأولي، لكن اختبارات التكامل لا تزال قيد الإنجاز.

يعالج إصلاح الأداء مشكلة تحويل Markdown على جانب الخادم؛ بينما سيوفر الحد القابل للتخصيص حماية إضافية، خاصةً لأداء جانب المتصفح.

أرحب بالملاحظات حول الإعداد المقترح، وما إذا كان من الأفضل تضمينه في نفس طلب السحب أو إرساله بشكل منفصل.

إعجاب واحد (1)