Suggerimento: Migrazione da ActiveModelSerializers ad Alba

Ciao, ho appena notato che Discourse utilizza una versione precedente di ActiveModelSerializer.
È stato rilasciato cinque anni fa e non credo che sia una buona cosa.

Sembra che sia previsto un fork di AMS, ma c’è una soluzione migliore.
Il mio suggerimento qui è di migrare da AMS ad Alba, un serializzatore JSON che ho creato e mantengo. Sebbene Alba non sia compatibile al 100% con AMS, l’API che offre è simile ad AMS e circa 10 volte più veloce dell’ultima versione di AMS.

Se i manutentori sono d’accordo sulla migrazione, invierò una PR.

4 Mi Piace

Potresti cambiare 2 o 3 endpoint in PR ed eseguire alcuni benchmark? Questo potrebbe aiutarci a valutarlo :smiley:

4 Mi Piace

Sì, come ha menzionato Falco, dobbiamo preoccuparci di 2 aree qui:

  1. Compatibilità dei plugin: molti plugin estendono i serializzatori, vorremmo ridurre al minimo le modifiche che causano interruzioni

  2. Prestazioni: la modifica dei serializzatori deve essere supportata da dati concreti.

Raccomando di esaminare alcuni dei serializzatori coinvolti nelle pagine di argomenti o elenchi di argomenti e di utilizzarli come aree di test:

Quindi utilizzare le cifre “prima” e “dopo” di discoruse bench. Ti darà una sensazione molto accurata dei progressi compiuti.

La quantità di interruzione dell’ecosistema che siamo disposti ad accettare dipende fortemente dal miglioramento delle prestazioni qui.

6 Mi Piace

Mi scuso per la risposta tardiva.

Credo che apporti miglioramenti alle prestazioni, quindi eseguirò uno script di benchmark.

Non ero a conoscenza dei plugin serializzatori. Ho trovato un esempio di plugin che personalizzano il serializzatore.

Qui, il metodo include_votes? sembra un metodo magico di AMS poiché non riesco a trovare dove viene utilizzato nel codebase. Penso che abbiamo bisogno di una migrazione in questi casi poiché Alba non supporta questo comportamento.

Mantenere la compatibilità deve essere importante, quindi se non riesco a rendere Alba compatibile con i plugin esistenti, preferisco non procedere.

2 Mi Piace

La magia che stai cercando è add_to_serializer. Non è necessario creare un nuovo serializer.

Forse questo ti aiuterà: Add to serializer only for staff and current user - #7 by paresy

Ah, grazie, sembra che definisca solo alcuni metodi helper che restituiscono se il plugin è abilitato o meno e il corpo del plugin. Penso di poterlo rendere compatibile con Alba, fammici provare.

Mi dispiace. Non ho guardato abbastanza attentamente il plugin originale. Penso che il mio suggerimento potrebbe non essere utile come pensavo.

Se stai aggiungendo qualcosa ai serializer esistenti (come aggiungere un campo al serializer dei post), allora ti ho aiutato. Se devi aggiungere una nuova route che restituisce le proprie informazioni, allora dovrai fare qualcos’altro.