投稿編集中にビデオ/オーディオアップロードのリクエストを多数送信

皆さんこんにちは!バグを報告させていただきます。
v2.4.5、v2.5.0 で再現しました。

前提条件

  • 動画/音声アップロードを含む投稿を作成してください。
  • セキュアなメディアアップロードでテストしましたが、非セキュアなメディアでも再現するはずです。
  • 投稿の編集を開始します。
  • ブラウザの開発者コンソールを開きます。必要に応じて、アップロード API 用のフィルターを設定してください。
  • すべてのリクエストが完了するまで待ち、コンソールをクリアします。

再現手順

  • 左側(編集)エリアに任意の文字を入力します。
  • ブラウザの開発者コンソールを確認します。

実際の結果

  • 各キー入力が変更とみなされ、単純な入力であっても常に動画アップロードイベントが生成されます。
  • 多数の変更が発生すると大量のリクエストが送信され、API のレート制限によりリクエストが拒否され、フォーラムから自動的にログアウトされます。

期待される結果

  • 投稿を編集中は、音声/動画のアップロードリクエストが発生しないこと

GIF を参照してください:

バグに関する注記:

この行 がバグの原因となっています。これはプレビューレンダリングのたびに(つまり、投稿が変更されるたびに)、<video>/<audio> DOM 要素のload関数を呼び出しています。

「いいね!」 3

2.6 ベータ版でも持続しますか?

はい、2.6ベータ版およびテスト通過ブランチの最新コミット(208d85aaff0392a3a796f84ea78670def6ed7b8e)でも同様の問題が発生しています。

それは奇妙ですね。私はウェブインスペクターの「Network」タブで「Disable cache」チェックボックスを選択した場合にのみ、この問題を再現できます。「Disable cache」の選択を解除すると、期待通りの結果が得られます。私はUbuntuでChromeを使用しています。あなたの動画を見ると、「Disable cache」は選択されていないようですが、何が違いを生んでいるのかよくわかりません。

「いいね!」 1

"キャッシュを無効化"はリクエストの送信には影響しません。これは、リクエストの結果がブラウザのキャッシュから来るのか、実際のソースから来るのかという点に影響します。

これらのアップロードリクエストは、すべてのキー入力ごとにプレビューを再レンダリングし、新しい動画/オーディオ DOM 要素を作成するコードによって送信されます。したがって、新しい DOM 要素に対して load が呼び出され、これは確実にリクエストを送信します。

たとえ「キャッシュされた」(常に新しく作成されるわけではない)DOM 要素であったとしても、リクエストは「キャッシュを無効化」の設定に関わらず、一度だけ送信されます。

これを確認し、安全な動画アップロードと非安全な動画アップロードの両方である程度再現できました。ある時点でキャッシュされ、これらのリクエストのスパムが止まるようですが、それでも問題となっています。あなたが指摘した行:

は私が追加したものですが、現在は実際には何も影響を与えていないようです。これを削除しても動画のプレビューは正常に動作します。動画のサムネイルなどに関する他の作業も行ったため、私がこの行を追加した理由だった問題はおそらく既に修正されているのでしょう。そのため、この行を削除して多重リクエストの問題を解消しようと思います。

「いいね!」 3

修正をマージしました https://github.com/discourse/discourse/pull/10511。詳細なバグレポートをありがとうございます!@kkurdupov

「いいね!」 4