更新日志:信息流改进
我们最近在 DEV 完成了第一个六周周期,其中一项变化让我特别兴奋,那就是让测试和更改首页文章源的生成方式变得更加容易。
首先,简单介绍一下背景:一月底,Justin写了一篇精彩的深度文章,详细讲解了首页文章推送的生成机制。提高推送内容的关联性是我们的首要任务,但在着手这项工作之前,我们需要先完成一些基础工作。Nick在这个周期的大部分时间里都在首页部署Preact组件,并优化推送内容,使其更易于我们(以及您!)进行修改。
此前动态
过去,构建信息流的逻辑同时存在于 Rails 后端和客户端 JavaScript 中。系统StoriesController会进行初始查询以获取一些Article对象并对其进行排序,然后initializeFetchFollowedArticles.js.erb对同一组文章进行额外的排名和评分。因此,如果想要更改信息流,使其优先显示标题中包含表情符号的文章,则需要在 Rails 后端和客户端 JavaScript 中都进行更改。StoriesController此外,initializeFetchFollowedArticles.js.erb根据用户查看的首页信息流版本(普通信息流还是基于时间的信息流,以及用户是否已登录),可能还需要修改其他 JavaScript 文件。
绝对不适合快速变化和实验:难怪首页信息流的组成很少变化,而且每次变化的幅度也很小。
齐心协力
为了方便修改信息流的构建方式,我们已开始将信息流生成逻辑整合到一个服务类中。Articles::Feed旧版控制器StoriesController和新版控制器Stories::FeedController在渲染首页文章信息流时都会使用此服务的输出。我们已开始使用已initializeFetchFollowedArticles.js.erb登录用户首页文章信息流的排名(未登录用户路径和未预激活的信息流组件仍然使用此排名。这只是一个小小的进步!)
TL;DR:如果您想尝试不同的首页信息流布局,Articles::Feed这里就是您未来一站式解决方案!
评估饲料性能
仅仅改变信息流的生成方式是不够的:目标是生成更贴近用户、更具吸引力的信息流。Ben已经实现了 Andrew Kane 出色的Field Test gem ,用于 A/B 测试。以下代码片段用于选择测试:Stories::FeedController
def ab_test_user_signed_in_feed(feed)
test_variant = field_test(:user_home_feed, participant: current_user)
case test_variant
when "base"
feed.default_home_feed(user_signed_in: true)
when "more_random"
feed.default_home_feed_with_more_randomness
when "mix_base_more_random"
feed.mix_default_and_more_random
when "more_tag_weight"
feed.more_tag_weight
when "more_tag_weight_more_random"
feed.more_tag_weight_more_random
else
feed.default_home_feed(user_signed_in: true)
end
end
每个“实验”在服务中都有其专属的方法Articles::Feed,用户会根据百分比值进行路由field_test.yml。更棒的是:现场测试会追踪哪些用户访问了哪个版本的首页,以及这些用户访问页面和评论文章的频率。我们利用这些信息来评估首页的哪些变量最能引起用户的共鸣。务必将数据融入讨论!
接下来
接下来几周,我们会持续监控并调整首页信息流算法。我还想在Articles::Feed服务中加入更多信息流生成机制:如果您有兴趣,欢迎随时参与!
祝您编程愉快!❤️
文章来源:https://dev.to/devteam/changelog-feed-improvements-4jag