meriksson
(Martin Eriksson)
1
我们的 Discourse 论坛长期存在一个反复出现的问题,我们最终成功定位并能够可靠地复现该问题。
复现步骤如下:
-
准备一个包含数千条回复的主题
-
在该主题中书签某条帖子
-
打开该主题
此时,该主题加载时间会显著变长。在某些情况下,加载会超时,并返回 Nginx 错误(502 Bad Gateway)。
以下是我们论坛中的一些大致加载时间数据:
-
对于约有 1,000 条回复的主题,创建书签后额外增加的加载时间为几秒。虽然可察觉,但并非严重问题。
-
对于约有 4,000 条回复的主题,加载时间通常为 20–30 秒,有时甚至超时,导致页面无法正常加载。
-
对于超过 9,000 条回复的主题,大多数情况下会超时。偶尔能够加载,但往往需要 30 秒以上。
请注意,如果这些主题中没有书签,它们可以正常加载。该问题仅出现在对特定主题拥有书签的用户身上;一旦他们移除书签,主题即可恢复正常加载。
5 个赞
Canapin
(Coin-coin le Canapin)
2
我在论坛上有 30000 和 10000 条回复的主题中无法复现您的问题。
4 个赞
Lovgren
(Claes Lövgren)
3
如果不太麻烦的话,能否您在复现步骤第2步设置书签时,尝试设置一个定时提醒,看看是否会有变化?正是这个方法最终让我成功复现了问题(具体而言,在我的情况下是设置了“周一”的提醒)。
这导致与书签帖子 ID 相关的 .json-request 在尝试 30 秒后开始返回 302 状态码,如下图所示。(在我点击个人资料菜单中的书签链接时出现。)
巧合的是,我还注意到搜索查询也开始表现出类似的行为,尽管只是变得极其缓慢,而且是在任何子论坛中搜索任何内容时都会发生,包括那些根本没有书签帖子的子论坛:
[已编辑:来自 Chromium 开发者工具的慢速搜索查询截图,因仅允许一个嵌入]
根据其他经验,这听起来像是某种 SQL N+1 问题,但我对 Discourse 代码和 Ruby 本身都还不够精通,无法确定是否可能是循环 JSON 模型或类似情况导致了同样的表现。
3 个赞
martin
(Martin Brennan)
8
此问题已在以下提交中修复:
cc @Macaw,他创建了相关话题 Bookmarking a Post on a Large Topic creates Absurd Loading Times
6 个赞