发布于 2026-01-06 0 阅读
0

更新日志:信息流改进

更新日志:信息流改进

我们最近在 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
Enter fullscreen mode Exit fullscreen mode

每个“实验”在服务中都有其专属的方法Articles::Feed,用户会根据百分比值进行路由field_test.yml。更棒的是:现场测试会追踪哪些用户访问了哪个版本的首页,以及这些用户访问页面和评论文章的频率。我们利用这些信息来评估首页的哪些变量最能引起用户的共鸣。务必将数据融入讨论!

接下来

接下来几周,我们会持续监控并调整首页信息流算法。我还想在Articles::Feed服务中加入更多信息流生成机制:如果您有兴趣,欢迎随时参与!

祝您编程愉快!❤️

文章来源:https://dev.to/devteam/changelog-feed-improvements-4jag