缓存API响应

时间:2019-05-02 00:32:43

标签: javascript node.js

我们在Angular中使用的Web应用程序依赖于第三方API ,后者会以响应方式返回JSON对象,并且大多数时候它的性能很糟糕,因为我们无法使API超时,因此它的数据很重要。有什么方法可以引入一个缓存数据库,该数据库从第三方API获取数据并存储该数据或某种API缓存机制?如果是,那么将如何更新数据?当实际数据更新时,更新缓存数据的机制将是什么。

我不想在客户端缓存数据,因为并非所有用户都可以使用。我说的是集中式缓存数据库或API缓存,它们的数据可以保持一致并且是最新的。

谢谢

3 个答案:

答案 0 :(得分:0)

@Sohail如果API性能不佳,在客户端使用缓存可能无济于事。我认为您可以使用以下类似方法来确保Web应用程序用户获得更流畅的体验。

您还没有提到服务器端基础架构。因此,YMMV。

  1. 后台服务,它polls第三方API并将数据存储在您的服务器上。这样可以释放轮询性能不佳的API的Web应用。
  2. 使用来自后台服务(例如socket.ioWebSocket或类似服务)的推送机制将new data事件发送到在浏览器中运行的网络应用,然后该网络应用会轮询服务器中的数据(而不是第三方API)。对于生态系统中的每个组件(网络应用程序,调用第三方API的后台服务以及仅返回通过轮询第三方API存储的数据的自己的API)明确的职责,这使它变得更清洁,更精简。 / li>

我同意,这还需要更多工作,但是它将使您的应用程序的各个方面都易于维护。

答案 1 :(得分:0)

对此的答案在很大程度上取决于许多因素,主要是关于API返回的内容。由于您经常要求它,所以我假设它已更改,但是您想要缓存,因此两次更新之间必须有一些时间-最简单的方法是向仅返回版本信息的API发出请求(或其他ID(时间戳等),您可以根据最新的API请求进行检查,如果有区别,您将知道需要向该API发出请求。

根据您要缓存的数据,一种选择是将响应存储在服务器上(例如cache / latest_api_response.json)。每次加载应用程序并发出API请求时,它都会首先检查本地响应数据,并在可能的情况下检查远程版本以查看是否需要更新(或者您可以检查数据是否小于1小时,等等(取决于您的需要),如果没有,则只需按照与从API返回下载的数据相同的方式返回数据即可。

正如其他人指出的那样,存在现有的缓存解决方案,并且确实有上百万种处理方式,因此它确实在很大程度上取决于您要使用的内容!

答案 2 :(得分:-1)

我建议将数据缓存在可以在所有组件中使用的全局名称空间变量中,或者将缓存库用于js-cache

<script src="bundle/cache.js"></script> 
<script>
    cache.set('lorem', 'ipsum', 60000);
    console.log(cache.get('lorem'));
</script>