Отправка множества запросов на загрузку видео/аудио при редактировании поста

Всем привет! Хочу сообщить об ошибке.
Воспроизводится в версиях v2.4.5, v2.5.0.

Предварительные условия

  • Создайте пост с загрузкой видео/аудио.
  • Я тестировал с безопасной загрузкой медиа, но ошибка должна воспроизводиться и при небезопасной загрузке.
  • Начните редактировать пост.
  • Откройте консоль разработчика браузера. По желанию, установите фильтр для API загрузки.
  • Дождитесь завершения всех запросов и очистите консоль.

Шаги для воспроизведения

  • Введите любой текст в левой области (редактирование).
  • Проверьте консоль разработчика браузера.

Фактический результат

  • Каждое нажатие клавиши воспринимается как изменение, поэтому при простом наборе текста постоянно создаются события загрузки видео.
  • Большое количество изменений приводит к отправке множества запросов, после чего происходит отклонение запросов из-за ограничения частоты API и автоматический выход из форума.

Ожидаемый результат

  • Никаких запросов на загрузку аудио/видео при редактировании поста.

Смотрите gif:

Примечание об ошибке:

Эта строка вызывает ошибку. Она вызывает функцию load элемента DOM <video>/<audio> каждый раз при рендеринге превью, фактически при каждом изменении поста.

3 лайка

Сохраняется ли это в бета-версии 2.6?

Да, это сохраняется в версии 2.6beta, а также в последнем коммите (208d85aaff0392a3a796f84ea78670def6ed7b8e) ветки test-passed.

Это странно. Я могу воспроизвести проблему только при выборе флажка «Отключить кэш» на вкладке «Сеть» в инструментах разработчика браузера. Когда я снимаю этот флажок, результаты становятся ожидаемыми. Я использую Chrome на Ubuntu. Судя по вашему видео, у вас не выбран флажок «Отключить кэш», поэтому я не уверен, что вызывает эту разницу.

1 лайк

“Отключение кэша” не должно влиять на отправку запросов. Оно влияет только на источник получения результата запроса — из кэша браузера или из реального источника.

Эти запросы на загрузку отправляются кодом, который перерисовывает предпросмотр при каждом нажатии клавиши, что приводит к созданию нового DOM-элемента для видео/аудио. Поэтому для нового DOM-элемента обязательно вызывается load, что непременно должно инициировать отправку запроса.

Даже если бы использовался «кэшированный» (не всегда создаваемый заново) DOM-элемент, запрос отправлялся бы только один раз, независимо от настройки «Отключить кэш».

Я изучил это и могу частично воспроизвести проблему как с безопасными, так и с небезопасными загрузками видео. На определённом этапе система, похоже, начинает кэшировать и прекращает спамить такими запросами, но проблема всё ещё сохраняется. Строка, на которую вы указали:

была добавлена мной, но сейчас она, похоже, ни на что не влияет. Если я её удалю, превью видео всё ещё будут работать корректно. Я знаю, что мы уже проделали другую работу с эскизами видео и т. д., которая, вероятно, устранила ту проблему, ради которой я изначально добавил эту строку. Поэтому я думаю, что просто удалю её, что решит проблему с множественными запросами.

3 лайка

Внесено исправление по FIX: Remove unnecessary audio/video parent element load by martin-brennan · Pull Request #10511 · discourse/discourse · GitHub. Кстати, спасибо за подробный отчет об ошибке! @kkurdupov

4 лайка