使 Web 应用程序可离线使用的策略?

Strategies to make a web application available offline?

我们目前正在构建一个网络应用程序(Django,Ember),我们刚刚发现我们的大多数潜在客户需要偶尔离线访问该应用程序。

我们需要的不仅仅是 "presenting" 应用程序,以便用户可以导航、在清单中缓存内容等等(我想我们最终也会需要),但我们必须让用户实际操作尽可能像在线一样。显然会有一些功能不可用,但应该可以使用该应用程序的基本用法。

也就是说,我很想听听以前遇到过这种情况的人的一些想法。在我看来,我们需要:

1.- 检查我们是否经常在线/离线,或者让用户指定他们何时离线(类似于智能手机中的飞行模式)。

2.- 所有数据都应转储到 IndexedDB 中,从那一刻起,我们将 IndexedDB 用于与数据相关的任何事情。

3.- 当用户重新在线时,同步进程必须尝试将数据从离线用户转储到在线数据库。虽然这看起来很危险,但我不希望有很多用户同时离线,而其他在线用户正在使用该应用程序,所以我希望这个同步过程不会成为真正的噩梦,我也不希望期望有竞争条件。

好吧,显然可以选择创建桌面独立应用程序...但我会尽量避免这种情况...

谢谢!

  1. 要检查用户是离线还是在线,您可以使用 navigator.onLine,但并非所有浏览器都支持此 属性。然后,如果您针对其中一些浏览器,则必须使用 AJAX 调用实施其他解决方案。

  2. 关于同步,您可以在 javascript 前端使用 CouchDB (NoSQL) on your server and use PouchDB (indexedDB) 等可用解决方案,这将简化同步过程。如果它不符合你的期望,实现你自己的解决方案,将一个 indexedDB 与你的服务器数据库同步(MySQL,Postgres,MongoDB,等等......),当然,你仍然可以使用前端pouchDB.

  3. 关于性能,我认为很大程度上取决于:

    • 托管您的网络应用程序的服务器数量
    • 你的主数据库的副本数量
    • 您的服务器配置(CPU 和 RAM)