【问题标题】:Web App in Flaky Internet connection不稳定的 Internet 连接中的 Web 应用程序
【发布时间】:2016-11-05 17:01:10
【问题描述】:

拥有基于 PHP/mySQL/JS-JQuery 的网站,记录赛车手的完成时间,然后将时间发送回服务器。服务器在数据库中插入完成时间,根据差点公式计算完成位置。存储它并将完成位置发送回网页,并在屏幕上更新。 它使用 Jquery Ajax 调用,因此页面根本不会重新加载。 如果数据连接良好,一切正常。

如果数据连接不正常,我的第一个版本页面会显示连接不正常的消息。 现在我正试图让它更智能一些,所以我开始使用 HTML5 功能,它告诉浏览器是在线还是离线(我意识到这可能不是最好的方法,但它适用于概念测试) 当记录(或更新)新的完成时间并且我们处于离线状态时,JS 只需将一个 notSent 类添加到完成时间的标签中。结束位置和所有通常来自服务器的结束位置都显示为灰色,表示数据不再有效(直到它可以与服务器通信)。

当浏览器发现自己重新在线时,每个 notSent 类上的一个简单的 jQuery each 循环开始重新发送 AJAX 请求,如果它们都完成了,它会处理返回的完成位置信息并将其显示为最新的。

当浏览器离线时,它还会禁用页面上的所有外部链接。这可以防止用户通过单击一个链接而意外丢失数据输入页面,该链接会给他们一个找不到页面的按钮。

所以我的最后一个问题是浏览器重新加载和关闭按钮,如果用户在离线时单击这些按钮,他们将丢失数据输入屏幕并且运气不好,直到连接恢复。 我也可以禁用这些功能吗?对此的快速 Stack-overflow 搜索表明它可以完成,但大多数答案都给出了旧的,“你真的不应该,如果你认为你需要你应该重新考虑你的设计。”警告。

所以我开始重新思考我的设计;

  • HTML 5 本地存储(决定我不需要它,因为我的数据已经存储在输入框中)
  • App-cache Manifest 用于控制页面的缓存,因此如果在离线浏览器中重新加载,是否会获得该缓存版本。经过大量阅读后得出的结论是,这可以在静态页面上工作,但不能在我的数据一直更新的地方工作。然后发现大多数浏览器无论如何都在弃用它。
  • Service Worker 似乎是控制离线缓存的未来可能,但并非所有浏览器都支持它,学习起来相当麻烦,而且还是很新。

现在我被困住了,倾向于防止浏览器重新加载并推迟学习服务工作者,直到获得更多支持和更好的示例,例如我的动态内容页面。

底线-我在这里遗漏了什么吗?有没有简单的解决方案?

【问题讨论】:

    标签: reload service-worker cache-manifest offlineapps progressive-web-apps


    【解决方案1】:

    我认为最好的选择是使用PouchDB 在客户端和服务器之间进行同步,并在您重新连接时使用Background Sync 唤醒 Service Worker。如果您的浏览器中没有 Service Worker,它可以在您的用户下次打开浏览器时同步。

    Service Worker Cookbook 中解释了类似的 example of deferred requests

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多