编写脱机工作和在线工作时,最好将其编写一次以脱机工作,在线模式与离线工作方式相同吗?
例如,让我们看看我们有一个典型的购物车示例。购物车包含物品和顾客。
当加载购物车时,我应该将所有项目+客户缓存在本地存储中并在线上和线下使用该数据缓存并根据需要更新缓存吗?开发离线/在线混合Web应用程序时有哪些最佳实践?
答案 0 :(得分:7)
编写网络应用程序以在线/离线模式工作非常类似于编写任何“普通”服务器驱动的Web应用程序,除了您的应用程序之间有数据访问层(DAL)以及服务器上的数据(在线模式)或浏览器的数据(离线模式)。
根据应用程序及其需要,您可以运行以下两种模式之一:a。)缓存并尝试最佳模式或b。)加载所有内容并检查更新模式。
这两种模式中的每一种都有一些好的和一些不好的部分,你肯定可以让你的应用程序的不同部分倾向于这种方式。
缓存并尝试最佳模式
对于此模式,DAL将数据从服务器缓存到浏览器的数据存储中,因为它在正常操作过程中访问数据。一旦处于离线模式,DAL会尝试最好地满足用户的请求,但它只能使用缓存的数据,因此某些操作可能无法完成(或者至少不能立即完成)。从好的方面来说,等待加载数据的启动时间很短,但是在不利的情况下,每个操作都需要服务器命中(如果连接)并且必须缓存数据。对于因数据不完整而无法完成的任何操作,应用程序也必须正常失败。
加载所有内容并检查更新模式
在这种情况下,DAL会在应用启动时将应用所需的所有数据加载到浏览器中。如果已经加载了应用程序,则必须更新所有数据以确保缓存不是陈旧的。从好的方面来说,用户不必等待很长时间就可以做任何事情,因为一切都是本地操作,但在下方,如果有大量数据,启动时间可能是相当长。
在任何一种情况下,您都必须解决陈旧的缓存问题,并将问题留给服务器进行离线操作。这意味着在启动时,也可能在应用程序运行时定期,您需要同步回服务器以保持缓存数据新鲜,并分享您可能与服务器的任何仅本地状态,以便世界其他地方看到该应用程序实例的更新。
当应用程序处于离线模式时,将操作保留回服务器可能会非常棘手,因为该操作涉及的数据会在应用程序更新之间发生变化。例如,如果缓存的银行余额过期并且表示比服务器反映的“真实”状态多得多,则用户可以在不知情的情况下透支帐户。这是一个极端的例子,但是这种操作冲突检测需要用于处理可能相互碰撞的更新。
一般情况下,如果您的应用既可以在线也可以在线,请编写应用,以便应用本身无需关心。较低级别的数据层抽象出所有问题,您的应用程序只需要知道如何处理无法获取所需信息(任何好的应用程序,在线或离线应该这样做)。
对于购物车,您可能(或希望?)拥有比任何个别客户可能放入购物车的产品更多的产品。将所有这些加载到每个人的浏览器中几乎肯定会浪费大量带宽,并且会给用户带来这样的延迟,即大量带宽成本和丢失的销售(由于响应时间慢)会很快导致任何业务陷入困境。根据需要将产品加载到浏览器数据中,如果需要,您可以加载“其他用户也购买”的与购物车中实际商品相关联的其他产品。