Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务人员可以预缓存MySQL数据库吗?_Javascript_Mysql_Service Worker - Fatal编程技术网

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

Javascript 服务人员可以预缓存MySQL数据库吗?,javascript,mysql,service-worker,Javascript,Mysql,Service Worker,我有一个使用服务人员的PWA。它可以预缓存我觉得非常有用的URL和资产,特别是因为我已经将其转换为TWA并在Play Store上发布 它所连接的MySQL数据库相当轻,大约为6mb 是否可以使用我的服务人员预缓存整个数据库,还是只能预缓存URL/静态资产?服务人员可以缓存/预缓存给定请求的响应。 假设服务器上有LibraryMySQL数据库,包含Books和Authors等表。为了使用服务工作者缓存它,您可以创建一个以JSON格式返回书籍和作者的服务,例如GEThttps://you-api.

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

它所连接的MySQL数据库相当轻,大约为6mb


是否可以使用我的服务人员预缓存整个数据库,还是只能预缓存URL/静态资产?

服务人员可以缓存/预缓存给定请求的响应。 假设服务器上有
Library
MySQL数据库,包含
Books
Authors
等表。为了使用服务工作者缓存它,您可以创建一个以JSON格式返回书籍和作者的服务,例如
GEThttps://you-api.com/library
。然后,根据您的缓存策略,您可以:

  • 添加
    https://you-api.com/library
    URL,指向服务人员的
    install
    步骤中使用的预缓存资源列表,或
  • 处理与
    https://you-api.com/library
    请求
在这两种情况下,您都可以将结果存储在
缓存
索引数据库
中。不过我更喜欢
IndexedDB
,因为我们以后需要能够方便地处理这些数据。如果决定单独存储MySQL表记录,可以使用IndexedDB创建多个存储

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

你可以:

  • 直接从页面查询本地
    数据库,或
  • 继续使用服务人员
让我们关注第二个选项。您的应用程序很可能使用某些服务从远程数据库获取数据。比如说
https://you-api.com/library/book/
服务用于按id检索图书。为什么不利用我们在本地缓存图书这一事实呢?最直接的方法是:

  • 使用上面的服务工作者截获与上面的URL对应的获取请求
  • 从请求URL读取表名和图书id
  • 查询本地
    图书馆
    数据库中的特定图书,并以与远程服务相同的格式返回该图书
其他一些注意事项和特殊情况:

  • 处理本地数据库不存在的情况
  • 决定何时以及如何更新数据库
  • 处理模式更改
  • 可以选择采用网络优先策略。尝试首先从远程服务检索数据库记录,并在网络不可用时回退到缓存版本

您可以缓存任何“看起来”像静态资源的内容。因此,可以缓存从请求返回的JSON。我认为您将遇到的限制是每个源浏览器的存储限制-这是特定于实现的。是的,我目前正在缓存所有JSON响应,但根据搜索内容,可能会有1000种变化。因此,如果有人脱机并试图搜索他们尚未查看的内容,那么我无法找到解决方法。您是否考虑过将MySQL数据库移动到浏览器中的IndexDB或WebDB中?这可能是最好的解决方案。在缓存时用完整数据库更新浏览器数据库,然后查询浏览器数据库进行搜索?将是两个世界中最好的。