【问题标题】:Strategies to make a web application available offline?使 Web 应用程序离线可用的策略?
【发布时间】:2016-02-23 20:30:29
【问题描述】:

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

我们需要的不仅仅是“呈现”应用程序以便用户可以导航、缓存 Manifest 中的内容等等(我想我们最终也会需要),但我们必须让用户尽可能多地实际操作如果他们在线。显然会有一些功能不可用,但应用程序的基本用法应该是可用的。

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

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

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

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

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

谢谢!

【问题讨论】:

  • 为了帮助解决 #1,您可以为 offlineonline 事件添加事件处理程序。当设备离线并重新在线时会触发这些。
  • 您在服务器上使用哪个数据库?
  • @LouisBarranqueiro PostgreSQL 和 redis 用于缓存
  • 对于任何回到这里的人,我发现了这个资源丰富的好网站github.com/pazguille/offline-first,甚至不知道有一个叫做 ServiceWorkers 的东西......

标签: django offline offline-caching offline-mode offline-browsing


【解决方案1】:
  1. 要检查用户是离线还是在线,您可以使用navigator.onLine,但并非所有浏览器都支持此属性。然后,如果您以其中一些浏览器为目标,您将不得不使用 AJAX 调用实现其他解决方案。

  2. 1234563如果不符合您的期望,实现您自己的解决方案,将 indexedDB 与您的服务器数据库(MySQL、Postgres、MongoDB 等)同步,当然,您仍然可以在前端使用 pouchDB。
  3. 关于性能,我认为很大程度上取决于:

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

【讨论】:

  • 感谢您的回复,我读了很多书,看起来 ServiceWorker-IndexedDB(PouchDB) 和 CouchDB 似乎是要走的路。我唯一关心的是如何将 CouchDB (noSQL) 与服务器中的 PostgreSQL 数据库同步...
  • PouchDB 而不是你的意思?因为couchDB是服务器上的数据库。
  • 哦,您想将 PouchDB 与 CouchDB 一起使用,并将 CouchDB 与 PostgreSQL 同步。为什么不直接使用 PouchDB 和 PostgreSQL?
  • 不确定是否可以做到,我是离线第一世界的新手:D
  • 可以,但是你必须实现适配器。它有很多作品。当然,最好的方法是使用 PouchDb 和 CouchDB。检查这个how to have complete offline functionality in a web app with postgresql database
猜你喜欢
  • 2011-03-28
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2015-05-13
  • 2015-03-18
  • 1970-01-01
相关资源
最近更新 更多