Sugestão: Migrando de ActiveModelSerializers para Alba

Olá, acabei de notar que o Discourse usa uma versão antiga do ActiveModelSerializer.
Ele foi lançado há cinco anos e acho que não é bom.

Parece que está planejado fazer um fork do AMS, mas há uma solução melhor.
Minha sugestão aqui é migrar do AMS para o Alba, um serializador JSON que criei e mantenho. Embora o Alba não seja 100% compatível com o AMS, a API que ele oferece é semelhante ao AMS e cerca de 10 vezes mais rápido que o AMS mais recente.

Se os mantenedores concordarem com a migração, enviarei um PR.

4 curtidas

Você poderia mudar 2 ou 3 endpoints para ele em um PR e executar alguns benchmarks? Isso pode nos ajudar a avaliá-lo :smiley:

4 curtidas

Sim, como Falco mencionou, precisamos nos preocupar com 2 áreas aqui:

  1. Compatibilidade de plugins - muitos plugins estendem serializadores, gostaríamos de minimizar alterações que quebrem a compatibilidade.

  2. Desempenho - a alteração de serializadores precisa ser apoiada por dados concretos.

Recomendo analisar alguns dos serializadores envolvidos nas páginas de tópicos ou listas de tópicos e usá-los como campos de teste:

Em seguida, use os números “antes” e “depois” do discoruse bench. Isso lhe dará uma noção muito precisa do progresso feito.

A quantidade de interrupção do ecossistema que estamos dispostos a aceitar depende muito da melhoria de desempenho aqui.

6 curtidas

Desculpe pela demora na resposta.

Acredito que isso traga melhorias de performance, então executarei um script de benchmark.

Eu não sabia sobre os plugins de serializador. Encontrei um exemplo de plugins que personalizam o serializador.

Aqui, o método include_votes? parece um método mágico do AMS, já que não consigo encontrar onde ele é usado no codebase. Acho que precisamos de alguma migração nesses casos, pois o Alba não suporta esse comportamento.

Manter a compatibilidade deve ser importante, então, se eu não conseguir tornar o Alba compatível com os plugins existentes, prefiro não prosseguir.

2 curtidas

A mágica que você procura é add_to_serializer. Você não precisa criar um novo serializador.

Talvez isso ajude: Add to serializer only for staff and current user - #7 by paresy

Ah, obrigado, parece que ele apenas define alguns métodos auxiliares que retornam se o plugin está habilitado ou não e o corpo do plugin. Acho que posso torná-lo compatível com Alba, deixe-me tentar.

Desculpe. Eu não olhei com atenção suficiente para o plugin original. Acho que minha dica pode não ser tão útil quanto eu pensava.

Se você está adicionando algo a serializadores existentes (como adicionar um campo ao serializador de postagens), então eu ajudei. Se você precisar adicionar uma nova rota que retorne suas próprias informações, então você precisará fazer outra coisa.