VueJS + Firestore - Автосохранение голосов - PullRequest
0 голосов
/ 13 октября 2018

У меня есть сайт, похожий на переполнение стека, где пользователи могут увеличивать и уменьшать количество голосов.У меня вопрос, как я могу эффективно сохранить эту информацию в firestore под архитектурой Vuejs / Firestore / VUEX?Как другие сайты, такие как stackoverflow / reddit, справляются с этим?

Я не хочу сохранять напрямую при клике, потому что Firestore взимает плату за запись, и пользователю было бы очень легко переключать голоса вверх / вниз много разпоследовательно.У меня также есть несколько облачных функций, которые могут сработать, каждая из которых требует времени.

Я вижу несколько альтернатив.Я мог бы установить 2-секундный интервал таймера после того, как голос подан, и если он не изменится за это время, отправьте его в пожарную.Недостатком является то, что он не работает, когда пользователь слишком быстро покидает страницу, и после тестирования нескольких более крупных сайтов этот подход кажется более низкого качества.

Другой альтернативой является сохранение при обновлении / выходе страницы с помощью VUEX.Хотя решения, которые я нашел для этого, похоже, основаны на использовании объекта window , который, как я слышал, может не сработать, если / когда я внедряю SSR в свое приложение.

Возможно, естьвстроенное решение для этого?

1 Ответ

0 голосов
/ 14 октября 2018

Обычный способ защитить ваш бэкэнд от злоумышленников - добавить ограничение скорости для определенных событий.В вашем случае события голосования "за" / "против".

Ваш первый подход

Вы упомянули, что это очень близко к тому, как работает ограничение скорости.Просто вместо того, чтобы запустить событие в firestore через 2 секунды после , когда пользователь нажал, и ничего не изменилось, вы также можете немедленно запустить событие и затем заблокировать любые события на 2 секунды.Таким образом, пользователь может покинуть страницу в течение 2 секунд, и в вашей базе данных все еще будет сохраняться голосование «вверх / вниз».

Ваш второй подход

Это на самом деленекоторые из них я никогда не пробовал, но только потому, что вы уже упомянули потенциальные проблемы, возникающие в сочетании с SSR, и сложность сохранения его во временном локальном состоянии, заставило меня подумать, что этот подход может не стоить работы.

пример решения

Я скопировал это из комментария к проблеме GitHub, см. Пример jsfiddle:

Существуют решения, которые вы можете сделать для ограничения скорости для каждого пользователя.используя правила link to fiddle http://jsfiddle.net/firebase/VBmA

Мы обсуждали раскрытие этой информации, но в настоящее время мы не раскрываем квоту, ограничение скорости или показатели выставления счетов.Вероятно, есть более эффективные способы настройки этих вещей, чем Правила (которые в основном предназначены для authN / Z, определения ресурсов, проверки типов).Беспокойство об их разоблачении вызвано распространением различных конфигурационных файлов (firestore.quota, firestore.billing, firestore.rules и т. Д.), Которые бесполезно сбивают с толку пользователей.

проблема: https://github.com/firebase/firebase-js-sdk/issues/647#issuecomment-380303400

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