编辑帖子时发送许多视频/音频上传请求

大家好!我想提交一个 Bug。
已在 v2.4.5 和 v2.5.0 版本中复现。

前提条件

  • 创建一篇包含视频/音频上传的帖子。
  • 我使用安全媒体上传进行了测试,但非安全媒体上传也应能复现。
  • 开始编辑该帖子。
  • 打开浏览器的开发者控制台。可选:设置上传 API 的过滤器。
  • 等待所有请求完成,然后清空控制台。

复现步骤

  • 在左侧(编辑)区域输入任意内容。
  • 检查浏览器的开发者控制台。

实际结果

  • 每次按键都被视为更改,因此简单的打字操作会不断触发视频上传事件。
  • 大量更改会导致发送海量请求,随后因 API 速率限制而拒绝请求,并导致论坛自动登出

预期结果

  • 编辑帖子时,不应触发任何音频/视频上传请求。

请查看动图:

关于此 Bug 的说明:

这一行代码 导致了该 Bug。它在每次预览渲染(实际上即每次帖子内容变更时)都会调用 <video>/<audio> DOM 元素的 load 函数。

3 个赞

它在 2.6 测试版中是否仍然存在?

是的,该问题在 2.6 beta 版本以及 test-passed 分支的最新提交(208d85aaff0392a3a796f84ea78670def6ed7b8e)中依然存在。

这很奇怪。我只有在勾选网络标签页中的“禁用缓存”复选框时才能复现该问题。当我取消勾选“禁用缓存”时,结果符合预期。我使用的是 Ubuntu 系统上的 Chrome 浏览器。从你的视频来看,你似乎没有勾选“禁用缓存”,所以我不确定造成差异的原因是什么。

1 个赞

“禁用缓存”不会影响请求的发送。它仅影响请求结果的来源——是来自浏览器的缓存还是真实源。

这些上传请求是由在每次按键时重新渲染预览的代码发送的,这会导致创建新的视频/音频 DOM 元素。因此,对于新的 DOM 元素会调用 load,这必然会发送请求。

即使是一个“已缓存”的(并非每次都是新创建的)DOM 元素,无论是否启用“禁用缓存”,它也只会在首次发送一次请求。

我查看了一下,在安全和非安全的视频上传中都能部分复现该问题。在某个时间点,系统似乎会缓存并停止频繁发送这些请求,但这仍然是一个问题。你指出的这一行:

是我添加的,但它现在似乎实际上没有任何影响。如果我将它移除,视频预览仍然可以正常工作。我知道我们之前已经针对视频缩略图等进行了其他改进,这些改进可能已经解决了我为此添加该行时所面对的问题。因此,我认为直接移除这一行即可,这将解决多次请求的问题。

3 个赞

已合并修复 https://github.com/discourse/discourse/pull/10511。顺便感谢 @kkurdupov 提供的详细错误报告!

4 个赞