建议:从 ActiveModelSerializers 迁移到 Alba

您好,我刚注意到 Discourse 使用的是旧版本的 ActiveModelSerializer。
它是在五年前发布的,我认为这不太好。

看起来计划是 fork AMS,但有一个更好的解决方案。
我在这里建议从 AMS 迁移到 Alba,这是我创建和维护的一个 JSON 序列化器。虽然 Alba 与 AMS 的兼容性不是 100%,但它提供的 API 与 AMS 相似,并且比最新的 AMS 快大约 10 倍。

如果维护者同意迁移,我将发送一个 PR。

4 个赞

您能否在 PR 中更改 2 到 3 个端点并运行一些基准测试?这可能有助于我们评估它 :smiley:

4 个赞

是的,正如 Falco 所提到的,我们需要关注两个方面:

  1. 插件兼容性 - 许多插件扩展了序列化器,我们希望尽量减少破坏性更改。

  2. 性能 - 更改序列化器需要有确凿的数据支持。

我建议查看主题或主题列表页面中涉及的一些序列化器,并将它们用作测试场地:

然后使用 discoruse bench 的“之前”和“之后”数据。这将让你非常准确地感受到取得的进展。

我们愿意接受的生态系统中断程度在很大程度上取决于这里的性能改进。

6 个赞

抱歉回复晚了。

我认为这能提高性能,所以我将运行基准测试脚本。

我不知道序列化器插件。我找到了一个自定义序列化器的插件示例。

在这里,include_votes? 方法似乎是 AMS 的一个魔术方法,因为我在代码库中找不到它的使用位置。我认为在这种情况下我们需要进行一些迁移,因为 Alba 不支持这种行为。

保持兼容性一定很重要,所以如果我无法使 Alba 与现有插件兼容,我宁愿不继续。

2 个赞

您要找的魔法是 add_to_serializer。您不需要创建新的序列化器。

也许这会有帮助:Add to serializer only for staff and current user - #7 by paresy

啊,谢谢,看起来它只是定义了一些辅助方法,用于返回插件是否启用以及插件主体。我认为我可以使其与 Alba 兼容,让我试试。

抱歉,我没有仔细看原始插件。我认为我的提示可能不像我想的那么有帮助。

如果你正在向现有序列化器添加内容(例如向 post 序列化器添加字段),那么我帮到了你。如果你需要添加一个返回自身信息的新路由,那么你需要做些别的事情。