عند تحرير وحفظ منشورات طويلة للغاية (حوالي 100,000 حرف)، واجهنا مشكلة في تجاوز المهلة الزمنية للواجهة الخلفية (Backend Timeout). يصبح الخادم غير مستجيب أثناء عملية الحفظ، مما يؤدي إلى ظهور أخطاء 502/504. يعرض وحدة التحكم في الواجهة الأمامية مكدس الأخطاء التالي:
ajax-error.js:36:15
l ajax-error.js:36
u ajax-error.js:75
d ajax-error.js:84
Ember 41
update rest.js:72
update rest.js:72
save rest.js:115
editPost composer.js:1147
Ember 6
أجريت بعض الاختبارات المقارنة التي تشير إلى أن الاختناق يقع في حساب الفرق (Diff) بين النسخة القديمة والنسخة الجديدة:
- يؤدي تحرير منشور طويل A مباشرة إلى منشور طويل B وحفظه باستمرار إلى حدوث تجاوز للمهلة الزمنية (أخطاء 502/504).
- يؤدي مسح المنشور الطويل أولاً، وحفظ نص مؤقت قصير (مثلاً 5 أحرف)، ثم لصق المحتوى الجديد الكامل B وحفظه، إلى إتمام العملية بسرعة.
يبدو أن محرك حساب الفرق الحالي يواجه صعوبة في الحالات القصوى التي تتضمن نصوصاً طويلة جداً مع نسبة تغيير عالية. هل من الممكن إضافة آلية احتياطية للأداء؟ على سبيل المثال، عندما يكون النص طويلاً للغاية ونسبة التعديلات عالية، يمكن للنظام معاملته كـ “إعادة كتابة كاملة” بدلاً من إجراء حساب فرق مفصل سطراً بسطر.
هل لدى الفريق أي خطط لتحسين معالجة حساب الفرق للمنشورات الكبيرة، أو إدخال نوع من التدهور المتدرج / الحماية لمثل هذه السيناريوهات؟ فكرة أخرى هي السماح بنجاح الحفظ أولاً، ثم حساب الفرق بشكل غير متزامن لاحقاً.