我们目前正在构建一个 Web 应用程序(Django、Ember),我们刚刚发现大多数潜在客户需要偶尔离线访问该应用程序。
我们需要的不仅仅是“呈现”应用程序,以便用户可以导航、在 list 中缓存内容等等(我想我们最终也需要),但我们必须让用户尽可能多地实际操作如果他们在线的话。显然有些功能不可用,但应用程序的基本用法应该可用。
也就是说,我很想听听以前遇到过这种情况的人们的一些想法。在我看来,我们需要:
1.- 检查我们是否持续在线/离线,或者让用户指定何时离线(类似于智能手机中的飞行模式)。
2.- 所有数据都应转储到 IndexedDB 中,从那一刻起,我们将 IndexedDB 用于与数据相关的任何内容。
3.- 当用户重新上线时,同步进程必须尝试将数据从离线用户转储到在线数据库。虽然这可能看起来很危险,但我预计不会有很多用户在其他在线用户正在使用该应用程序时同时离线,因此我预计此同步过程不会成为真正的噩梦,我也不认为期望有竞争条件。
嗯,显然可以选择创建桌面独立应用程序...但我会尽力避免这种情况...
谢谢!
最佳答案
要检查用户是否离线或在线,您可以使用 navigator.onLine但并非所有浏览器都支持此属性。然后,如果您针对其中某些浏览器,则必须实现其他解决方案,例如使用 AJAX 调用。
关于同步,您可以使用可用的解决方案,如 CouchDB (NoSQL) 在您的服务器上并使用 PouchDB (indexedDB) 在您的 javascript 前端中,这将简化您的同步过程。如果它不符合你的期望,实现你自己的解决方案,将indexedDB与你的服务器数据库(MySQL、Postgres、MongoDB等...)同步,当然,你仍然可以在前端使用pouchDB。
关于性能,我认为这很大程度上取决于:
- 托管网络应用程序的服务器数量
- 主数据库的副本数量
- 服务器配置(CPU 和 RAM)
关于django - 使 Web 应用程序离线可用的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33842161/