Salut, j’ai remarqué que Discourse utilise une ancienne version d’ActiveModelSerializer.
Elle est sortie il y a cinq ans et je ne pense pas que ce soit une bonne chose.
Il semble qu’il soit prévu de forker AMS, mais il existe une meilleure solution.
Ma suggestion est de migrer d’AMS vers Alba, un sérialiseur JSON que j’ai créé et que je maintiens. Bien qu’Alba ne soit pas 100% compatible avec AMS, l’API qu’il offre est similaire à celle d’AMS et environ 10 fois plus rapide que la dernière version d’AMS.
Si les mainteneurs sont d’accord pour la migration, j’enverrai une PR.
Oui, comme Falco l’a mentionné, nous devons nous préoccuper de 2 domaines ici :
Compatibilité des plugins - de nombreux plugins étendent les sérialiseurs, nous aimerions minimiser les changements majeurs.
Performance - le changement de sérialiseurs doit être étayé par des données concrètes.
Je recommande de regarder certains des sérialiseurs impliqués dans les pages de sujets ou de listes de sujets et de les utiliser comme terrains d’essai :
Utilisez ensuite les chiffres “avant” et “après” de discoruse bench. Cela vous donnera une idée très précise des progrès réalisés.
La quantité de perturbations de l’écosystème que nous sommes prêts à accepter dépend fortement de l’amélioration des performances ici.
Je pense que cela apporte des améliorations de performance, donc je vais exécuter un script de benchmark.
Je ne connaissais pas les plugins de sérialisation. J’ai trouvé un exemple de plugin qui personnalise le sérialiseur.
Ici, la méthode include_votes? semble être une méthode magique d’AMS car je ne trouve pas où elle est utilisée dans la base de code. Je pense que nous avons besoin d’une migration dans de tels cas car Alba ne prend pas en charge ce comportement.
Maintenir la compatibilité doit être important, donc si je ne peux pas rendre Alba compatible avec les plugins existants, je préfère ne pas continuer.
Ah, merci, il semble qu’il définisse simplement quelques méthodes d’aide qui renvoient si le plugin est activé ou non et le corps du plugin. Je pense que je peux le rendre compatible avec Alba, laissez-moi essayer.
Désolé. Je n’ai pas assez regardé le plugin d’origine. Je pense que mon indice pourrait ne pas être aussi utile que je le pensais.
Si vous ajoutez quelque chose à des sérialiseurs existants (comme ajouter un champ au sérialiseur de publication), alors je vous ai aidé. Si vous devez ajouter une nouvelle route qui renvoie ses propres informations, alors vous devrez faire autre chose.