对用户卡片数据源的更改

目前,当您点击用户卡片时,我们会加载 /u/david.json,这与我的完整个人资料使用的端点完全相同。这有些浪费,因为用户卡片甚至不需要使用大部分数据!

因此,我们将把用户卡片切换到使用新路由 /u/david/card.json。该路由仅包含渲染卡片所需的信息。在我的测试中,这使得用户卡片的加载速度比之前快 2-3 倍!

目前,此更改位于一个隐藏的站点设置之后。要尝试它,请进入您的 Rails 控制台并运行:

SiteSetting.enable_new_user_card_route = true

在接下来的几周内,这将默认启用,并且该站点设置将被移除。目前 Meta 站点已启用此功能。

太好了!我需要做什么?

如果您是普通用户或论坛管理员,无需任何操作!您很快就能看到用户卡片性能的提升!

如果您是插件开发者,可能需要做一些调整以支持新路由。

我在插件中使用了自定义字段,并在用户卡片上渲染它们

没问题,自定义字段将继续以完全相同的方式工作。

我向用户序列化器添加了数据,并在完整用户个人资料中使用它

没问题,用户个人资料将继续使用旧端点,任何现有的 add_to_serializer 调用也将继续有效。

我向用户序列化器添加了数据,并在用户卡片上使用它

好的,您需要做一些工作。以前我们的结构如下:

class UserSerializer < BasicUserSerializer

现在的结构如下:

class UserCardSerializer < BasicUserSerializer
# 以及
class UserSerializer < UserCardSerializer

如果您希望某些内容包含在卡片端点中,需要将其添加到 UserCardSerializer 中。例如,如果您有以下代码:

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

您需要将其更改为:

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

UserSerializer 将自动包含 UserCardSerializer 中的所有内容,因此您可以立即进行此更改,即使隐藏站点设置未启用,它也能在测试通过后正常工作。

为了与稳定版/测试版保持兼容,请添加对 UserCardSerializer 的检查,如下所示:

# TODO: 一旦 Discourse 2.4 稳定版发布,请移除此开关
serializer = (defined? UserCardSerializer) ? :user_card : :user 
add_to_serializer(serializer, :favourite_forum_software) do
  "discourse"
end
22 个赞

干得漂亮,@david。非常期待看到这个功能。我完全同意需要为用户卡片引入新的序列化器。

我认为这一改动也为在 /u 路由上显示用户卡片奠定了基础。

7 个赞

确实如此!敬请期待 :eyes:

7 个赞

这现已成为新的默认设置,且该选项已被移除。

6 个赞