تم تفعيل ميزة "lazy_loaded_categories" التجريبية على ميتا

:information_source: تم إيقاف هذا المشروع مؤقتًا. قد نعود إليه في المستقبل وننشر تحديثًا هنا في حال ذلك.

نُطلق ميزة تجريبية جديدة لمساعدة المجتمعات التي تحتوي على عدد كبير من الفئات. :rocket:

على مدار الأشهر القليلة الماضية، عملنا بجد لتحسين أداء مواقع Discourse للمجتمعات التي تمتلك العديد من الفئات (وليس فقط!). سيُمكّن هذا المسؤولَين من إنشاء آلاف الفئات مع الحفاظ على تجربة المستخدم الودية والمألوفة لديك.

لا تزال هذه ميزة تجريبية، ويمكن تفعيلها عن طريق تعديل إعداد الموقع lazy_loaded_categories_groups. وهي معطلة افتراضيًا حاليًا.

:gear: كيف تعمل هذه الميزة؟

في الوقت الحالي، يتم تحميل جميع بيانات الفئات عند تنقلك داخل مجتمع Discourse. يُطلق على هذا الأسلوب “التحميل المسبق” (eager loading)، وهو ليس مثاليًا للمواقع التي تحتوي على عدد كبير من الفئات، لأنه يعني نقل كمية كبيرة من المعلومات قبل العرض الأول، مما يزيد من وقت التحميل الإجمالي.

تُعرف الطريقة الجديدة بـ “التحميل الكسول” (lazy loading)، وستؤجل تحميل معلومات الفئة حتى تصبح ضرورية حقًا (على سبيل المثال، عند البحث عن فئة، أو التنقل إليها أو ربطها، أو قراءة موضوع أو مشاركة تذكر فئة معينة، إلخ). يعني نقل بيانات أقل وقت تحميل أسرع ومستخدمين أكثر سعادة! :star:

:discourse: ماذا يعني ذلك لك، كعضو في Meta؟

لقد قمنا باختبار هذه الميزة بشكل مكثف داخليًا، ولكن نظرًا لحجم العمل المنجز، هناك احتمال طفيف لإدخال أخطاء. إذا لاحظت أي خلل يتعلق بالفئات، يرجى إعلامنا من خلال الرد على هذا الموضوع أو فتح موضوع في قناة Contribute > Bug.

:people_holding_hands: ماذا يعني ذلك لك أو لمجتمعك؟

سواء كنت مستضيفًا لدينا أو تستخدم الاستضافة الذاتية (self-hosted)، فإن هذه الميزة معطلة افتراضيًا، ولا ينبغي أن تكون هناك أي تغييرات مرئية.

ومع ذلك، إذا كنت تنوي توسيع مجتمعك ليشمل العديد من الفئات، فنحن نشجعك بشدة على تفعيل هذه الميزة.

في المستقبل، سنقوم بتفعيلها افتراضيًا، وفي النهاية سنُعتبرها قديمة (deprecated) ونزيل الكود المسؤول عن “التحميل المسبق” للفئات.

:technologist: ماذا يعني ذلك لمطوري الإضافات والسمات؟

بشكل عام، لا ينبغي أن تكون هناك حاجة إلى تغييرات كبيرة لمعظم الإضافات، طالما أنها تستخدم مكونات الفئات من النواة (core) أو البيانات المحملة مسبقًا (على سبيل المثال، استعلام فقط عن الفئات المرئية بالفعل عند تحميل الصفحة، لأن ذلك يعني أنها تم تحميلها مسبقًا).

قد تظهر بعض المشكلات عند محاولة استخدام معلومات لفئات لم يتم تحميلها بعد. ستستمر طريقة Category.findByIds في إرجاع الفئات التي تم تحميلها فقط، بينما قد تقوم Category.asyncFindByIds بإجراء بحث على الخادم إذا لم تكن المعلومات محملة بعد.

44 إعجابًا

تبدو معلومات الفئة مفقودة عند استخدام أحد الروابط أسفل منشور للانتقال إلى موضوع في فئة مختلفة. فتحت Contributing translations to Discourse في علامة تبويب جديدة وانتقلت إلى https://meta.discourse.org/t/switching-from-transifex-to-crowdin/140288، ثم يبدو الأمر كالتالي:


بعد إعادة التحميل، تظهر الفئة.

6 إعجابات

بعد نشر موضوعي #site-feedback:theme-feedback، كانت شارة الفئة مفقودة للمواضيع من تلك الفئة

4 إعجابات

لا يمكن لدالة البحث داخل المنشئ تحديد ما إذا كانت هناك فئة مطابقة.

3 إعجابات

هل يرتبط ذلك أيضًا بالفئات المحملة بشكل كسول؟

إعجابَين (2)

نعم. لقد قمت بتعطيل lazy_load_categories في الوقت الحالي لأنها كانت تسبب خللاً في المكون الإضافي للمستندات.

5 إعجابات

لقد أعدنا تمكين هذه التجربة هنا. ما تم إصلاحه منذ تمكينها آخر مرة:

  • يتم ملء الفئات في الرأس بشكل صحيح، خاصة عند التنقل من موضوع إلى آخر باستخدام روابط المشاركات أو الموضوعات المقترحة

  • سيتم عرض تنسيق الشارات بشكل صحيح بعد إنشاء موضوع جديد في فئة لم يتم الانتقال إليها من قبل

  • يقوم المكون الإضافي للمستندات بتحميل بيانات الفئات مسبقًا، لذلك يتم الآن عرض صفحة /docs بشكل صحيح

  • تم اكتشاف أخطاء أخرى من خلال المراجعة الداخلية

الخلل الوحيد المعلق يتعلق بنتائج البحث المفقودة لبعض الاستعلامات (الاستعلامات القصيرة أو الاستعلامات التي تحتوي فقط على كلمات توقف).

أردنا جعل البحث أكثر قوة وقمنا بتوسيع محرك البحث بالنص الكامل ليشمل الفئات، وهذا تأثير جانبي غير مرغوب فيه. أعتقد أننا سنضطر إلى التراجع عن خوارزمية البحث السابقة، لكننا ما زلنا نحقق في هذا الأمر.

7 إعجابات

فئات مشرفي الفئات في /about مفقودة

وعندما أنظر إلى مسوداتي، فإن الفئات مفقودة أيضًا.

صفحة النشاط لمجموعة أو مستخدم والإشعارات في ملفي الشخصي مثل https://meta.discourse.org/my/notifications/responses لا تقوم بتحميل الفئات

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

8 إعجابات

عند فتح /categories، لا تظهر جميع الفئات الفرعية لـ Documentation (يختفي #documentation:theme-developers بعد إعادة التحميل حتى أنقر على Documentation).

ولا يعمل الإكمال التلقائي للبحث عن الفئات. معظم الفئات لا تظهر بعد إعادة التحميل

3 إعجابات

الفئات مفقودة أيضًا في قائمة المواضيع ذات الصلة.

وعندما زرت المواضيع لتحميل الفئات للصورة الثانية، لاحظت أنه في الموضوع الثاني #announcements:blog، كانت الفئة الموجودة أسفل عنوان الموضوع مفقودة. أفترض أن هذا ليس مهمًا لأنه لا ينبغي أن يحدث عندما تعمل المواضيع ذات الصلة.

4 إعجابات

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

عندما أفحص Site.current().categories ويتم تمكين التحميل الكسول، أرى (فقط) الفئات التي أحتاجها (مثل فئة الموضوع الحالي)، ولكن يبدو أن جميع preloaded_category_custom_fields مفقودة.

تظهر عند إيقاف التحميل الكسول (مع جميع الفئات الأخرى).

لذلك، يتم تحميل الفئة الصحيحة مسبقًا ولكنها تفتقد حقولها المحملة مسبقًا.

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

تم إصلاح هذا. :white_check_mark:

تم إصلاحها أيضًا. :white_check_mark:

تم إصلاحها أيضًا. :white_check_mark:

المشاكل الأخرى قيد العمل حاليًا. شكرًا جزيلاً لك على ملاحظاتك، @Moin.

يعتمد الأمر على كيفية تحميل الفئات. أتفق على أنه من المحتمل أن تكون هناك بعض المسارات البرمجية التي قد تؤدي إلى تحميل بيانات فئة جزئية. سأتواصل مع الفريق بشأن هذه المشكلة، ولكن نظرًا لأننا نتحرك نحو حالة سيحتاج فيها الواجهة الأمامية إلى طلب البيانات التي يحتاجها قبل الوصول إليها.

هل هو مكون إضافي عام؟ إذا كان الأمر كذلك، يمكنني إلقاء نظرة عليه. بشكل عام، تطلبت المكونات الإضافية الأكثر شيوعًا لدينا تغييرات قليلة جدًا لجعلها تعمل عند تمكين “التحميل الكسول للفئات”.

3 إعجابات

لا يزال لون الفئة الأم مفقودًا


إعجابَين (2)

يحدث هذا في عرض موضوع عادي.
الشيء الوحيد الذي قد يكون مميزًا هو أن التعليمات البرمجية موجودة في تهيئة أولية، في عنصر واجهة مستخدم مرفق بـ post-contents:before widget. المكون الإضافي ليس عامًا ولكن يمكنني منحك الوصول إذا أرسلت لي اسم مستخدمك على Github عبر رسالة خاصة. بدلاً من ذلك، يمكنني إرسال رسالة خاصة لك مع ملف tar.gz، والذي قد يكون أسهل. المكون الإضافي قديم ولم أكتبه في الأصل ولكني لا أرى أي شيء خاطئ بشكل واضح.

إذًا كيف سيعمل ذلك؟ يمكنني فهم الموقف الثنائي حيث تكون الفئة موجودة أو غير موجودة. ولكن إذا واجهت فئة بدون حقل مخصص معين، فكيف أعرف ما إذا كان الحقل المخصص غائبًا أم أنه لم يتم تحميله بالكامل بعد؟

أي، هذا لا ينبغي أن يحدث أبدًا!

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

إذن هل يمكنك مساعدتي في هذا الأمر @nbianca؟

عند تمكين التحميل بكسل، تكون الحقول المخصصة مفقودة من كائن الفئة هنا في مكون الردود الخاصة العام الخاص بي.

      if ((siteSettings.private_replies_on_selected_categories_only == false) || (topic?.category?.custom_fields?.private_replies_enabled)) {
        return this.currentUser && ((this.currentUser.id == topic_owner_id) || this.currentUser.staff);
      }

وليس لدي أي فكرة عن كيفية الحصول عليها.

أنا أضيف الحقل إلى الحقول المخصصة للفئة المحملة مسبقًا.

Site.preloaded_category_custom_fields << 'private_replies_enabled'

أنا أناقش هذا مع الفريق داخليًا، ولكن أعتقد أننا سنحتاج إلى مراجعة كيفية تحميل الفئات للمواضيع مسبقًا.

إعجابَين (2)

لقد وجدت مكانًا آخر تفتقر فيه الفئات: نتائج بحث الذكاء الاصطناعي.

إعجابَين (2)

عند تحديث meta.discourse.org واختيار “+ موضوع جديد”، يفشل قالب الموضوع في الظهور. في البداية، كما هو موضح في الفيديو، تعمل جميع الأشياء بشكل صحيح. ومع ذلك، بعد إعادة التحميل، يكون القالب مفقودًا. بمجرد فتح المنشئ مرة أخرى، تستأنف جميع الأشياء العمل كما هو متوقع.

ملاحظة: إذا كان لديك Support في الشريط الجانبي الخاص بك، فيجب عليك إزالته قبل إعادة التحميل.

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

مُستند إلى وقابل للتوسع.