我们目前正在构建一个web应用程序(Django、Ember),我们刚刚发现我们的大多数潜在客户需要偶尔离线访问该应用程序。
我们需要的不仅仅是"展示"应用程序,让用户可以导航,在清单中缓存内容等等(我想我们最终也需要),我们还必须让用户尽可能多地像在线一样实际操作。显然会有一些功能不可用,但应用程序的基本用法应该可用。
也就是说,我很想听听以前遇到过这种情况的人的一些想法。在我看来,我们需要:
1.-要么检查我们是否一直在线/离线,要么让用户指定他们何时离线(有点像智能手机中的飞行模式)。
2.-所有数据都应该转储到IndexedDB中,从那时起,我们将Indexed数据库用于与数据相关的任何内容。
3.-当用户重新联机时,Synch进程必须尝试将数据从脱机用户转储到数据库联机。虽然这看起来可能很危险,但我不希望很多用户在其他在线用户使用该应用程序的同时离线,所以我希望这个同步过程不会成为真正的噩梦,我也不希望出现比赛情况。
嗯,很明显,可以选择创建一个桌面独立应用程序。。。但我会尽量避免这种情况。。。
谢谢!
-
若要检查用户是脱机还是联机,可以使用navigator.online,但并非所有浏览器都支持此属性。然后,如果您针对其中一些浏览器,则必须使用AJAX调用来实现其他解决方案。
-
关于同步,您可以在服务器上使用CouchDB(NoSQL)等可用解决方案,并在javascript前端使用PouchDB(indexedDB),这将简化同步过程。如果它不能满足您的期望,请实现您自己的解决方案,将indexedDB与服务器数据库(MySQL、Postgres、MongoDB等)同步,当然,您仍然可以在前端使用pouchDB。
-
关于性能,我认为这将在很大程度上取决于:
- 承载web应用程序的服务器数量
- 主数据库的副本数
- 服务器配置(CPU和RAM)