تغييرات في مصدر بيانات بطاقة المستخدم

في الوقت الحالي، عند النقر على بطاقة مستخدم، نقوم بتحميل /u/david.json، وهو نفس نقطة النهاية تمامًا مثل ملفي الشخصي الكامل. هذا يُعدّ إهدارًا بعض الشيء، لأن بطاقة المستخدم لا تستخدم حتى معظم البيانات!

لذلك، سنقوم بتحويل بطاقة المستخدم لاستخدام مسار جديد هو /u/david/card.json. يحتوي هذا المسار على المعلومات الكافية فقط لعرض البطاقة. في اختباراتي، جعل هذا البطاقات أسرع بمرتين إلى ثلاث مرات مقارنةً بما كانت عليه من قبل!

في الوقت الحالي، هذا التغيير مخفي وراء إعداد موقع غير ظاهر. لتجربته، انتقل إلى وحدة تحكم Rails وقم بتشغيل الأمر التالي:

SiteSetting.enable_new_user_card_route = true

خلال الأسابيع القليلة القادمة، سيتم تمكين هذا الإعداد افتراضيًا، وسيتم إزالة إعداد الموقع. هذا مفعّل حاليًا في Meta.

رائع! ما الذي يجب عليّ فعله؟

إذا كنت مستخدمًا أو مسؤول منتدى، فلا شيء! يجب أن ترى تحسينًا في أداء بطاقات المستخدمين قريبًا جدًا!

إذا كنت مطوّر إضافة، فقد تحتاج إلى إجراء بعض التعديلات البسيطة لدعم المسار الجديد.

أنا أستخدم حقولًا مخصصة في إضافتي، وأعرضها على بطاقة المستخدم

لا مشكلة، ستستمر الحقول المخصصة في العمل بنفس الطريقة تمامًا.

أنا أضيف بيانات إلى مُسلسل المستخدم، وأستخدمها في ملف المستخدم الكامل

لا بأس، سيستمر ملف المستخدم في استخدام نقطة النهاية القديمة، وستستمر أي استدعاءات موجودة لـ add_to_serializer في العمل.

أنا أضيف بيانات إلى مُسلسل المستخدم، وأستخدمها على بطاقة المستخدم

حسنًا، ستحتاج إلى بذل القليل من الجهد. سابقًا، كان لدينا هيكل مثل:

class UserSerializer < BasicUserSerializer

أصبح لدينا الآن هيكل مثل:

class UserCardSerializer < BasicUserSerializer
# و
class UserSerializer < UserCardSerializer

إذا أردت تضمين شيء ما في نقطة نهاية البطاقة، فعليك إضافته إلى UserCardSerializer. على سبيل المثال، إذا كان لديك كود مثل هذا:

add_to_serializer(:user, :favourite_forum_software) do
  "discourse"
end

فإنك تحتاج إلى تغييره إلى:

add_to_serializer(:user_card, :favourite_forum_software) do
  "discourse"
end

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

للمحافظة على التوافق مع الإصدارات المستقرة/التجريبية، أضف فحصًا لـ UserCardSerializer مثل هذا:

# TODO: Remove switch once Discourse 2.4 stable is released
serializer = (defined? UserCardSerializer) ? :user_card : :user 
add_to_serializer(serializer, :favourite_forum_software) do
  "discourse"
end
22 إعجابًا

Great stuff @david. Really excited to see this one. I agree a 100% to the fact that a new serializer was needed to user cards.

I think this change also lays the ground for displaying user cards on the /u route.

7 إعجابات

It does indeed! Watch this space :eyes:

7 إعجابات

This is now the new default, and the setting has been removed

6 إعجابات