في الوقت الحالي، عند النقر على بطاقة مستخدم، نقوم بتحميل /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