VueJS + Firestore- 自动保存选票

VueJS + Firestore- Autosaving votes

我有一个类似于 stack overflow 的站点,用户可以在其中对帖子进行上下投票。我的问题是如何在Vuejs/Firestore/VUEX架构下高效的保存这些信息到firestore? Whosebug/reddit 等其他网站如何处理此问题?

我不想在点击时直接保存,因为 Firestore 按写入收费,而且用户很容易连续多次切换上/下投票。我还有许多会触发的云功能,每个功能都需要时间才能完成。

我看到了一些替代方案。我可以在投票后设置一个 2 秒的计时器间隔,如果在那段时间内没有改变,则将其提交给 firestore。当用户离开页面太快时,这种方法的缺点是不起作用,并且在测试了几个较大的站点后,这种方法似乎质量较低。

另一种方法是使用 VUEX 在页面刷新/退出时保存。虽然我为此找到的解决方案似乎依赖于使用 window 对象,但我听说如果/当我在我的应用程序中实现 SSR 时,它可能无法正常工作。

也许有针对此问题的内置解决方案?

保护后端免受恶意用户攻击的常用方法是对某些事件添加速率限制。在你的情况下 up/down 投票事件。

你的第一个方法

您提到的非常接近速率限制的工作方式。只需在用户单击 后将事件触发到 firestore 2 秒,但没有任何更改,您还可以立即触发事件,然后阻止任何事件 2 秒。这样,用户可以在 2 秒内离开页面,up/down 投票仍将保留在您的数据库中。

你的第二种方法

这实际上是一些我从未尝试过的方法,但仅仅因为您已经提到了与 SSR 结合使用的潜在问题以及将其保存到临时本地状态的复杂性,这让我认为这种方法可能不可行值得努力。

示例解决方案

我从 github 问题评论中复制了这个,以 jsfiddle 为例:

您可以使用规则为每个用户的速率限制执行一些解决方案 link to fiddlehttp://jsfiddle.net/firebase/VBmA

我们已经讨论过公开这些信息,但目前我们不公开配额、速率限制或计费指标。可能有比规则(主要用于 authN/Z、资源定义、类型验证)更好的配置这些东西的方法。对公开它们的担心是不同配置文件(firestore.quota、firestore.billing、firestore.rules 等)的激增,这会不必要地混淆用户。

问题: https://github.com/firebase/firebase-js-sdk/issues/647#issuecomment-380303400