数据库驱动的web应用程序:如何处理脱机使用


Database-driven web app: How to handle offline use

我正在使用Laravel(一个PHP框架)开发一个web应用程序。该应用程序将被我大约30名同事在他们的Windows笔记本电脑上使用。

我的同事定期与人面谈。一旦他们第一次采访某人,他们将使用网络应用程序向数据库中添加新的个人资料,并在随后的访问中为这些个人资料添加注释。配置文件和注释使用MySQL存储,但由于我使用的是Laravel,我可以很容易地切换到另一个数据库。

有时,我的同事不得不在人们离线时采访他们在没有任何互联网接入的会话中,他们可能会访问一群受访者,添加一些个人资料,并在现有的个人资料中添加一些笔记。

我应该如何处理?

  1. 每台笔记本电脑上都有一台本地网络服务器。我看到应用程序附带了一些安装程序,包括LAMP堆栈,但我找不到任何关于这方面的文档
  2. 我可以在每台笔记本电脑上安装应用程序和类似XAMPP的东西我自己这是可能的,但未来可能会有更多的人使用该应用程序,而不是所有人都在附近
  3. 我可以使用服务人员,也许与图书馆有关作为UpUp。这似乎是最优雅的方法

我想尝试一下选项(3),但我的应用程序是数据库驱动的,我不确定我是否能实现这种方法:

  • 是否可以将数据库中的所有(相关)数据写入(比如说)一个JSON文件,该文件在离线模式下可以访问而不是数据库?我们不需要处理太多数据(在面试过程中,应该有不到100个小数据记录)
  • 当我的同事在脱机模式下添加配置文件或笔记时,是否有任何"Web服务"方法可以将数据插入已输入的数据库中

谢谢
Pida

我认为这是分"两部分"构建应用程序。

首先,前端使用对后端的ajax调用(这只是一个RESTneneneba API)。如果没有任何网络连接,请使用本地存储将数据存储在浏览器中。

当用户以后有网络连接时,您可以将本地存储中存在的数据发送到后端并清除本地存储。

如果在笔记本电脑上添加网络服务器,数据库和信息将只存储在本地笔记本电脑上,不会同步。

您可以使用服务工作者缓存站点的静态内容以使其离线可用,并在服务工作者中使用特定的fetch处理程序来检测失败的PUTPOST并在IndexedDB中对数据进行排队。然后,当你的网络应用程序加载时,你会定期检查IndexedDB是否有任何排队的数据,并尝试重新发送

我在https://developers.google.com/web/showcase/case-study/service-workers-iowa#updates-到用户调度

本文假设使用sw-precache库缓存站点的静态资产,使用sw-toolbox库提供运行时fetch处理程序来检查失败的业务逻辑请求。它还使用了一个名为simpleDB的基于promise的IndexedDB包装器,尽管我现在可能会使用更新的idb库。