هذا الموضوع بالتحديد كان يزعجني منذ فترة طويلة. تساءلتُ: لماذا يستغرق التحميل من دقيقة إلى ثلاث دقائق، إذا قرر التحميل أصلاً؟
بعد أن لاحظتُ شخصاً آخر يؤيد هذه المشكلة في هذا المنشور، قرّرتُ البحث في الأمر: أزلتُ جميع الإشارات المرجعية من الموضوع الذي يحتوي على 4,500 منشور.
تحمّل فوراً كما هو الحال مع أي منشور آخر.
ثم سألْتُ نفسي: ما الطرق الأخرى التي يمكنني من خلالها اختبار هذا؟
بغض النظر عما إذا قمتُ بإشارة مرجعية للمنشور الأول أو المنشور الأحدث، لا يزال التحميل يستغرق وقتاً، وإن لم يكن دقائق بل حوالي 10 ثوانٍ.
تفاقمت هذه الظاهرة في المواضيع ذات المنشورات الأكثر؛ أشعر بوجود حدّ معين حول 4000 منشور يجعل أوقات التحميل بطيئة بهذا الشكل.
اختبرتُ ذلك في مواضيع أخرى تحتوي على أكثر من 4000 منشور.
كلما زاد عدد الإشارات المرجعية في موضوع ما، زاد الوقت اللازم لتحميله.
أفترض أن زيادة عدد الإشارات المرجعية في موضوع يحتوي على منشورات كثيرة تؤدي إلى إطالة وقت التحميل.
لإعادة إنتاج المشكلة: افتح موضوعاً يحتوي على منشورات كثيرة جداً، ثم أضف إشارة مرجعية لأحد المنشورات. للأسف، يتطلب الموضوع المشار إليه تسجيل الدخول لإضافة إشارة مرجعية لمنشور، كما أن الموضوع الذي يحتوي على أكبر عدد من الردود في هذا الموقع هو 925 فقط.
إذا كنت بحاجة إلى تقديم أي معلومات إضافية، فلا تتردد في السؤال.
ومع ذلك، قمت بإنشاء موضوع يحتوي على 5000 مشاركة محليًا وأنشأت إشارة مرجعية، ويتم التحميل في نفس الوقت سواء كان هناك إشارة مرجعية في الموضوع أم لا . سأضطر إلى مواصلة البحث… الكود الذي يقوم بتحميل الإشارات المرجعية لمستخدم في موضوع موجود هنا:
والكود الذي يبحث عن إشارة مرجعية لكل مشاركة موجود هنا:
بالنسبة لي، هذا لا يبدو جنونيًا أو مكثفًا من حيث الأداء. user_post_bookmarks ستستعلم من قاعدة البيانات مرة واحدة فقط لأنها مخزنة مؤقتًا، لذا لا توجد مشكلة N1 هنا. أيضًا، إليك كود عرض الموضوع لمعرفة ما إذا كانت هناك إشارة مرجعية على مستوى الموضوع:
لا أعتقد ذلك، فمنتدى Roblox يعمل على الإصدار Version bump to v2.6.0.beta3 · discourse/discourse@2a268bd · GitHub. منذ ذلك الحين، لم يتم دمج سوى تعديلين يتعلقان بالعلامات المرجعية (bookmarks) قمت بهما أنا، ولا يتعامل أي منهما مع تحميل العلامات المرجعية للمواضيع أو تسلسلها.
يبدو أنه يجب أن يكون هناك بعض التصادم الغريب الآخر في العمل، أليس كذلك؟
يحتوي كود SQL المُولَّد على LIMIT 1، مما يمنع استخدام الفهرس index_posts_on_topic_id_and_post_number، ويسبب تأخيرًا كبيرًا. لا أستطيع تكرار هذه المشكلة محليًا لأن قاعدة البيانات المحلية تحتوي على عدد قليل جدًا من المنشورات؛ فكلما زاد عدد المنشورات في منتدى Discourse الخاص بك، زادت حدة هذه المشكلة. سأقوم بتقديم إصلاح قريبًا.