تم تمكين ميزة ’lazy_loaded_categories‘ التجريبية على Meta

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

نقدم ميزة تجريبية لمساعدة المجتمعات التي لديها عدد كبير من الفئات. :rocket:

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

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

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

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

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

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

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

:people_holding_hands: ماذا يعني هذا بالنسبة لك أو لمجتمعك؟

سواء كنت مستضافًا من قبلنا أو تستضيف بنفسك، فإن هذه الميزة معطلة افتراضيًا ولا ينبغي أن تكون هناك أي تغييرات مرئية.

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

في المستقبل، سنقوم بتمكينها افتراضيًا وفي النهاية إهمال وإزالة الكود الذي يقوم بـ “التحميل الحريص” للفئات.

:technologist: ماذا يعني هذا لمطوري الإضافات (plugins) والسمات (themes)؟

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

قد تظهر بعض المشاكل عند محاولة استخدام معلومات للفئات التي لم يتم تحميلها بعد. ستستمر طريقة 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)

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