【问题标题】:Caching JavaScript API Calls缓存 JavaScript API 调用
【发布时间】:2014-04-03 23:02:33
【问题描述】:

我正在使用 JavaScript(this page)从客户端查询 GitHub API。

每次页面加载时都有 14 次 API 调用,这意味着我最终会很快达到 GitHub 的 API 速率限制,即每小时 5000 次调用。

我见过的大多数缓存策略都假设您可以访问服务器,但就我而言,我正在运行一个纯静态的 Middleman 站点。

所以我的问题是:如何缓存来自客户端的 API 请求?是否有提供此服务的第三方应用?

(请注意,我的用例是许多不同的客户端访问页面(例如,它已从 Hacker News 链接),而不是单个客户端刷新。所以本地缓存并没有太大帮助。)

【问题讨论】:

    标签: javascript api caching github


    【解决方案1】:

    同意 Firebase 或来自 @David 的单独数据存储替代方案,因此您可以创建持久缓存机制,因为您无权访问应用程序所在的服务器。它基本上是另一个数据存储,您可以更新 Middleman 中的逻辑,以重新调用 Github api 或根据您在访问该翻译页面时所做的一些检查从 Firebase 中保存的数据中提取数据。看看这里的逻辑

    【讨论】:

    • 哇,感谢您花时间制作该图表。欣赏它:)
    【解决方案2】:

    您可以使用本地存储或 cookie 缓存单个客户端的页面。这样,如果用户刷新,您可以有逻辑来查看是否要再次查询 API。如果您的用户群很小,这会很好。

    这种类型的缓存通常在服务器上完成,因为您将自己限制为每小时最多约 357 个用户。

    要在客户端缓存,将数据存储在本地存储中并记录查询的时间。然后决定一个时间间隔(比如说 5 分钟)。然后在任何刷新或页面加载之前,查看用户本地存储并查看查询是否在最近 5 分钟内。如果是,请从本地存储中读取。如果没有,则再次查询 API。这仅适用于每个用户,但通过每 5 分钟查询一次,您可以说每小时约 30 个用户。

    http://diveintohtml5.info/storage.html

    【讨论】:

    • 谢谢!但是恐怕LocalStorage并不能真正解决问题,因为我想到的用例不是少数用户多次访问同一页面,而是许多用户访问该页面一次(例如该页面发布在Hacker新闻)。
    【解决方案3】:

    没有服务器,嗯?你可以使用Parse 之类的东西。创建一个 Parse 对象,将键设置为特定的 GitHub API URI,并将值设置为如下所示:

    {
      stored: <Date>,
      value: <stringified JSON returned from GitHub API call>
    }
    

    然后,当有人点击您的客户端时,首先调用 Parse 以查看您是否已经为该特定 API 调用提供了缓存版本。如果不这样做,请调用 GitHub 的 API,然后将结果存储在 Parse 上(将 stored 设置为当前的 DateTime,以便稍后检查是否过时)。

    如果 Parse 确实存储了缓存版本,请检查 stored 值以查看它有多旧 - 如果它是陈旧的,请重新调用 GitHub,并将结果存储回 Parse。否则,只需解析来自 value 的 JSON 字符串即可。

    这是假设您希望对 14 个 GitHub API 调用进行单独的缓存控制。如果不这样做,那么只需将编译后的调用存储到 Parse 上的一个对象中,并使用 cache 之类的键。

    【讨论】:

    • Firebase 是另一种选择。
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 2015-04-12
    • 2011-07-24
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    相关资源
    最近更新 更多