【问题标题】:How to save firestore requests by using Http cache-control?如何使用 Http 缓存控制保存 Firestore 请求?
【发布时间】:2018-03-16 16:46:01
【问题描述】:

假设我有一个运行 firebase firestore 数据库的网络/移动应用程序。

我的应用设置为主要提供完全存储在 Firestore 中的动态内容

所以我们说的是缓存动态内容

如果用户加载页面 A,它将向 Firestore 发出 1 个请求(例如)。如果此用户转到页面 B,然后在 5 分钟后返回页面 A,我不希望应用在内容没有更改的情况下再次发出请求。

我听说过 http cache-control 标头,但我担心的是。如果缓存控制去检查firestore,看看内容是否还是一样,这个操作会被firestore算作请求吗?

【问题讨论】:

    标签: firebase caching http-caching google-cloud-firestore


    【解决方案1】:

    Firestore 不会以应用 HTTP Cache-Control 标头的方式发出请求。

    但是,protocol 包含一个恢复令牌的概念,它允许稍后恢复整个查询,可能避免重新传输与查询匹配的任何未更改的文档。

    如果您在 Web 应用程序中enable persistence,Firestore 将为您在本地 IndexedDB 中缓存文档和恢复令牌。如果您稍后返回某个页面,它将透明地使用恢复令牌并避免重传。

    注意pricing caveat

    如果侦听器断开连接超过 30 分钟(例如,如果用户离线),您将被收取读取费用,就像您发出了全新的查询一样。

    所以,专门解决您的问题。如果:

    • 您已启用持久性,
    • 基础数据没有改变,
    • 用户加载页面 A,并且
    • 5 分钟后再次加载页面 A

    然后 Firestore 将请求页面的数据,但服务器基本上会响应没有任何变化:不会传输任何文档,并且不会收取任何费用来确认。

    【讨论】:

    • 谢谢。这就是我想知道的。
    • 我们是否必须为 onSnapshot 注册无操作侦听器才能像使用 Firebase RTDB 一样将数据缓存在内存中? stackoverflow.com/questions/38423277/…
    • ^只是为了确认我测试了添加持久侦听器,它的响应时间从 ~300ms 下降到 ~5ms。想知道enablePersistence() 是否应该为我们处理这个问题...?
    • 添加侦听器表示对某个值感兴趣,因此,如果您绝对想在 RAM 中固定某些内容但不想对其进行任何操作,您可以创建一个无操作侦听器来完成此操作。启用持久性后,即使没有这些东西,您也应该能够按需创建侦听器并从本地缓存中获取响应。问一个单独的具体问题,我会更详细地介绍。
    • 这条评论:stackoverflow.com/questions/46649022/… 为我阐明了持久性行为。我想知道为什么我没有看到缓存优先数据,但我使用的是get() 而不是onSnapshot()。并不是我不想对数据做任何事情,只是希望后续请求更快。
    猜你喜欢
    • 2021-11-29
    • 2019-11-08
    • 2012-06-06
    • 2016-01-28
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多