Лимит 10 секунд для пользователя

Спокойнее, вы отправляете слишком много запросов.
Пожалуйста, повторите попытку через 5 секунд.
Код ошибки: user_10_secs_limit.

Я создал тему, которая использует await ajax(/t/${this.args.topic.id}.json);. Из-за чрезмерного количества запросов это приводит к ограничению скорости. Как можно этого избежать? Я заметил, что ограничение помечено как ограничение на уровне пользователя, а не на основе IP-адреса.

Вы находитесь за балансировщиком нагрузки, например Cloudflare, так что Discourse не знает реальный IP-адрес пользователя?

Быстрый поиск по коду не показывает user_10_secs_limit, кроме как в спецификации. Я подозреваю, что это может быть связано с IP, несмотря на ошибку, которую вы видите.

Здесь — вы не можете использовать grep для этого :slight_smile:

error_code: "#{error_code_identifier}_10_secs_limit",

Это происходит из discourse/lib/request_tracker/rate_limiters/user.rb at main · discourse/discourse · GitHub

@truman, ваш компонент темы делает это для множества тем? Что именно вы пытаетесь достичь? Вам стоит либо проверить возможность объединения вызовов, например, путем тегамирования тем и последующего получения их по тегу в одном запросе, либо найти механизм кэширования.

Ага! Я понял, что упустил что-то очевидное…

Я хочу получить реакции для каждой темы, чтобы отображать их на главной странице. Например:
image

Вам нужно сериализовать это в плагине, чтобы избежать всех этих запросов, и тогда все необходимые данные будут получены за один раз.

Вам не следует выполнять отдельный запрос для каждой темы в списке тем. Это никогда не позволит системе масштабироваться.

В качестве примера того, как это реализовано, посмотрите на Topic List Previews.

Получите репозиторий all-the-plugins и найдите add_to_serializer