En este momento, al hacer clic en una tarjeta de usuario, cargamos /u/david.json, que es exactamente el mismo punto de acceso que mi perfil completo. Esto es un poco ineficiente, ya que la tarjeta de usuario ni siquiera utiliza la mayor parte de los datos.
Por lo tanto, cambiaremos la tarjeta de usuario para que utilice una nueva ruta /u/david/card.json. Esta contiene solo la información necesaria para renderizar la tarjeta. En mis pruebas, esto hace que las tarjetas de usuario sean de 2 a 3 veces más rápidas que antes.
Por el momento, este cambio está detrás de una configuración de sitio oculta. Para probarlo, dirígete a tu consola de Rails y ejecuta:
SiteSetting.enable_new_user_card_route = true
En las próximas semanas, esto estará habilitado de forma predeterminada y la configuración de sitio se eliminará. Actualmente está habilitado en Meta.
¡Genial! ¿Qué necesito hacer?
Si eres un usuario o un administrador del foro, ¡nada! Deberías ver una mejora en el rendimiento de las tarjetas de usuario muy pronto.
Si eres un desarrollador de plugins, es posible que necesites hacer algunos ajustes para soportar la nueva ruta.
Uso campos personalizados en mi plugin y los renderizo en la tarjeta de usuario
No hay problema, los campos personalizados seguirán funcionando exactamente de la misma manera.
Añado datos al serializador de usuario y los uso en el perfil completo del usuario
Bien, el perfil del usuario seguirá utilizando el punto de acceso antiguo y cualquier llamada existente a add_to_serializer seguirá funcionando.
Añado datos al serializador de usuario y los uso en la tarjeta de usuario
Bien, tendrás que hacer un poco de trabajo. Anteriormente teníamos una estructura como:
class UserSerializer < BasicUserSerializer
Ahora tenemos una estructura como:
class UserCardSerializer < BasicUserSerializer
# y
class UserSerializer < UserCardSerializer
Si quieres que algo se incluya en el punto de acceso de la tarjeta, debes agregarlo al UserCardSerializer. Por ejemplo, si tienes un código como este:
add_to_serializer(:user, :favourite_forum_software) do
"discourse"
end
Debes cambiarlo a:
add_to_serializer(:user_card, :favourite_forum_software) do
"discourse"
end
El UserSerializer incluirá automáticamente cualquier cosa que esté en el UserCardSerializer, por lo que puedes hacer este cambio de inmediato y funcionará en los entornos donde las pruebas pasan (incluso si la configuración de sitio oculta está deshabilitada).
Para mantener la compatibilidad con las versiones estable/beta, agrega una verificación para UserCardSerializer como esta:
# TODO: Eliminar el interruptor una vez que se lance Discourse 2.4 estable
serializer = (defined? UserCardSerializer) ? :user_card : :user
add_to_serializer(serializer, :favourite_forum_software) do
"discourse"
end