2011-04-30 137 views
8

当编写一个应用程序离线工作和在线是最好的一次写入离线工作和在线模式将工作一样下线?编写应用程序离线工作(Web应用程序)

例如让我们看看我们有一个典型的购物车示例。购物车包含项目和客户。

当购物车被加载,我应该缓存中的所有项目+客户在本地存储,并根据需要使用这些数据缓存在线和离线和更新缓存?开发离线/在线混合Web应用程序时有哪些最佳做法?

回答

7

编写web应用程序中的联机/脱机模式下工作,真的非常像写任何“正常”的服务器驱动的Web应用程序,与你有一个数据访问层(DAL),不同的是你之间坐应用程序以及位于服务器(在线模式)或浏览器数据(离线模式)中的数据。根据应用程序及其需求,您可以运行以下两种模式之一:a。)一种缓存并尝试最佳模式或b。一种负载一切和检查替换的方式,更新模式。

每个这两种模式都有一些好的也有坏的部分,你绝对可以有一个瘦个子方式或其他应用程序的不同部分。

高速缓存和尝试,您的最佳模式

对于这种模式,从服务器到浏览器的数据存储,因为它访问数据时是正常的操作过程中,DAL缓存数据。一旦进入离线模式,DAL会尝试最好地满足用户的请求,但它只有缓存的数据才能工作,因此某些操作可能无法完成(或至少不是马上)。另一方面,等待数据加载的启动时间极少,但在不利条件下,每个动作都需要服务器命中(如果连接)并且该数据必须被缓存。由于数据不完整,该应用程序还必须优雅地对任何无法完成的操作失败。

负载一切和检查换更新模式

在这种情况下,DAL加载所有应用程序需要在浏览器中,当应用程序启动时的数据。如果应用程序已经被加载,那么所有的数据都必须更新以确保缓存没有失效。另一方面,用户不必等待很长时间才能完成任务,因为所有操作都是本地操作,但是如果存在大量数据,则启动时间可能是相当长。

在你战斗陈旧的缓存问题,并坚持离线操作的服务器问题,无论是哪种情况。这意味着,在启动时,也可能定期在应用程序运行时,您需要同步回服务器以保持缓存数据的新鲜度,并共享您可能与服务器之间的任何本地状态世界其他地方可以看到该应用程序实例的更新。

当应用程序更新之间涉及该操作的数据发生变化时,将应用程序处于脱机模式时发生的操作返回给服务器可能会特别棘手。例如,如果高速缓存的银行余额过期并且表示比服务器反映的“真实”状态多得多的钱,则用户可能在不知道它的情况下透支该帐户。这是一个极端的例子,但是这种操作性碰撞检测需要适当地处理可能碰撞的更新。

一般来说,如果您的应用程序既可以在线也可以离线,请编写应用程序,以便应用程序本身无需关心。较低级别的数据层将所有问题都抽象出来,而您的应用程序只需要知道如何处理无法获取所需信息(哪些应用程序在线或离线应该这样做)。

对于购物车,您可能(或者希望?)拥有比任何单个顾客可能放入购物车更多的产品。将它们全部加载到每个人的浏览器中几乎肯定会带来巨大的浪费,并且会给您的用户带来这样的延迟,以至于大量的带宽成本和销售损失(由于响应时间缓慢)会迅速淹没任何业务。根据需要将产品加载到浏览器数据中,如果需要,您可以加载其他用户也购买的与购物车中实际商品相关联的其他产品。