服务人员可以预缓存MySQL数据库吗?

时间:2019-03-02 14:26:20

标签: javascript mysql service-worker

我有一个利用服务人员的PWA。它可以预缓存我认为非常有用的URL和资产,特别是因为我已经将其转换为TWA并将其发布在Play商店中。

它连接的MySQL数据库大约只有6mb,很轻。

是否可以使用Service Worker预缓存整个数据库,还是只能预缓存URL /静态资产?

1 个答案:

答案 0 :(得分:1)

服务人员可以缓存/预缓存给定请求的响应。 假设您在服务器上拥有Library个MySQL数据库,其中包含诸如BooksAuthors之类的表。为了使用服务工作者对其进行缓存,您可以创建一个服务,该服务以JSON格式返回图书和作者,例如GET https://you-api.com/library。然后,根据您的缓存策略,您可以:

  • https://you-api.com/library URL添加到服务工作者的install步骤中使用的预缓存资源列表中,或者
  • 处理与fetch请求相对应的服务工作者的https://you-api.com/library事件。

无论哪种情况,都可以将结果存储在CacheIndexedDB中。不过,我更喜欢IndexedDB,因为稍后我们需要能够方便地使用此数据。如果您决定单独存储MySQL表记录,那么使用IndexedDB可以创建多个存储。

好的,我们已经创建并填充了本地数据库。现在呢?

您可以:

  • 直接从您的页面查询本地Library数据库,或
  • 继续使用服务人员

让我们关注第二个选项。您的应用很可能使用某些服务从远程数据库中获取数据。假设https://you-api.com/library/book/<id>服务用于按ID检索图书。为什么不利用我们的书在本地缓存这一事实呢?最直接的方法是:

  • 使用上述服务工作者拦截与上述URL相对应的提取请求
  • 从请求网址中读取表格名称和书号
  • 在本地Library数据库中查询该特定图书,并以与远程服务相同的格式返回该图书

一些其他注意事项和特殊情况:

  • 处理本地数据库不存在的情况
  • 确定何时以及如何更新数据库
  • 处理架构更改
  • (可选)采用网络优先策略。尝试先从远程服务中检索数据库记录,然后在网络不可用时回退到缓存版本
相关问题