目前,当您点击用户卡片时,我们会加载 /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