我正在构建一个新的 Web 应用程序,即使没有互联网连接,它也需要无缝工作。我选择了 Angular 并正在构建一个 PWA,因为它具有使应用程序离线工作的内置功能。到目前为止,我已经让服务工作人员完美工作并由清单文件驱动,这很好地缓存了静态内容,并且我已将其设置为缓存一堆我想在应用程序离线时使用的 API 请求。
除此之外,我还使用 localStorage 来存储用户离线时调用 put、post 和 delete API 请求的尝试。重新建立互联网连接后,存储在 localStorage 中的请求将被发送到服务器。
到目前为止,在我的概念验证中,用户可以在离线状态下访问内容、编辑数据,并且一旦用户的互联网连接重新建立,数据就会与服务器同步。但这就是我的困境开始的地方。根据清单文件中的定义,Service Worker 自动缓存 API 请求数据,并且有一个单独的数据存储用于离线时的数据编辑。这会导致用户编辑一些数据、保存数据、刷新页面并且数据由 Service Worker 缓存的 API 提供服务的情况。
是否有内置机制来更新 Service Worker 自动缓存的 API 数据?我不想尝试手动取消选择它,因为它看起来很老套,而且我无法想象随着服务工作人员的发展它会成为未来的证明。
如果没有标准方法来实现我需要做的事情,那么开发人员通常会通过手动将所有离线数据存储在 IndexedDB/localStorage 中来完全控制离线数据吗?也就是说,我可以调用 API 请求并编写一些代码,将结果以结构化格式缓存在 IndexedDB 中以形成离线数据库,然后每当用户编辑某些数据时写回到离线数据库,并在用户返回时上传任何数据编辑在线的。我不认为这样做会出现任何技术问题,只是似乎需要付出很大的努力才能实现我希望成为标准功能的东西。
我对使用 Angular 进行开发还很陌生,但拥有多年的其他开发经验。因此,如果我问了明显的问题,请原谅我,我似乎找不到一篇关于与 Service Worker 一起使用数据存储的最佳实践的好文章。
Thanks
我有一个项目,我的用户可以在离线时编辑本地数据,我使用Cloud Firestore https://firebase.google.com/docs/firestore/manage-data/enable-offline使本地数据库缓存可用。如果我理解正确的话,这正是您的要求。
该解决方案的好处是,只需一行代码,您不仅可以获得本地数据库,而且一旦客户端再次上线,所有离线所做的更改都会自动同步到服务器。
firebase.firestore().enablePersistence()
.catch(function(err) {
// log the error
});
// Subsequent queries will use persistence, if it was enabled successfully
如果您可以选择使用此 NoSQL 数据库,我会选择它,否则您需要自己实现本地更新,因为没有内置的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)