Cambios en la fuente de datos de la tarjeta del usuario

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
22 Me gusta

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 Me gusta

It does indeed! Watch this space :eyes:

7 Me gusta

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

6 Me gusta