Alterações na fonte de dados do cartão de usuário

No momento, ao clicar em um cartão de usuário, carregamos /u/david.json, que é exatamente o mesmo endpoint do meu perfil completo. Isso é um pouco desperdiçado, já que o cartão de usuário nem sequer utiliza a maioria dos dados!

Portanto, vamos mudar o cartão de usuário para usar uma nova rota /u/david/card.json. Isso contém apenas informações suficientes para renderizar o cartão. Em meus testes, isso torna os cartões de usuário de 2 a 3 vezes mais rápidos do que antes!

No momento, essa mudança está atrás de uma configuração de site oculta. Para testá-la, acesse seu console do Rails e execute

SiteSetting.enable_new_user_card_route = true

Nas próximas semanas, isso será ativado por padrão e a configuração de site será removida. Isso já está ativado agora no Meta.

Ótimo! O que preciso fazer?

Se você é um usuário ou administrador do fórum, nada! Você deve ver um desempenho melhorado nos cartões de usuário muito em breve!

Se você é um desenvolvedor de plugin, pode precisar fazer alguns ajustes para suportar a nova rota.

Uso campos personalizados no meu plugin e os renderizo no cartão de usuário

Sem problemas, os campos personalizados continuarão funcionando exatamente da mesma maneira.

Adiciono dados ao serializador de usuário e os uso no perfil completo do usuário

Tudo bem, o perfil do usuário continuará usando o endpoint antigo e todas as chamadas add_to_serializer existentes continuarão funcionando.

Adiciono dados ao serializador de usuário e os uso no cartão de usuário

Ok, você precisará fazer um pouco de trabalho. Anteriormente, tínhamos apenas uma estrutura como

class UserSerializer < BasicUserSerializer

Agora temos uma estrutura como

class UserCardSerializer < BasicUserSerializer
# e
class UserSerializer < UserCardSerializer

Se você quiser que algo seja incluído no endpoint do cartão, você precisa adicioná-lo ao UserCardSerializer. Por exemplo, se você tiver código como este:

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

Você precisa alterá-lo para

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

O UserSerializer incluirá automaticamente qualquer coisa no UserCardSerializer, então você pode fazer essa alteração imediatamente e ela funcionará nos testes aprovados (mesmo com a configuração de site oculta desativada).

Para manter a compatibilidade com as versões estável/beta, adicione uma verificação para UserCardSerializer como esta:

# TODO: Remover a alternância assim que o Discourse 2.4 estável for lançado
serializer = (defined? UserCardSerializer) ? :user_card : :user 
add_to_serializer(serializer, :favourite_forum_software) do
  "discourse"
end
22 curtidas

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 curtidas

It does indeed! Watch this space :eyes:

7 curtidas

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

6 curtidas