在编写离线和在线工作的应用程序时,最好编写一次离线工作的应用程序,并且在线模式将与离线模式工作相同?
例如,让我们看看我们有一个典型的购物车示例。购物车包含商品和顾客。
当购物车被加载时,我是否应该在本地存储中缓存所有的商品和客户,并将该数据缓存用于在线和离线,并根据需要更新缓存?在开发离线/在线混合web应用程序时,有哪些最佳实践?
发布于 2011-05-05 04:26:30
编写一个在线/离线模式下工作的web应用程序真的很像编写任何“普通”的服务器驱动的web应用程序,不同的是你有一个数据访问层(DAL),它位于你的应用程序和位于服务器(在线模式)或浏览器数据(离线模式)上的数据之间。
根据应用程序及其需要,您可以在以下两种模式之一运行: a.)缓存并尽最大努力模式或b。)加载所有内容并检查更新模式。
这两种模式各有优点和缺点,你的应用程序中肯定可以有不同的部分以某种方式倾斜。
缓存并尽力而为模式
对于此模式,DAL在其正常操作过程中访问数据时,会将服务器中的数据缓存到浏览器的数据存储中。一旦进入离线模式,DAL会尝试最好地满足用户的请求,但它只有缓存的数据可供处理,因此一些操作可能无法完成(或至少不能立即完成)。优点是,等待数据加载的启动时间最短,但缺点是,每个操作都需要一个服务器命中(如果连接),并且数据必须被缓存。对于任何由于数据不完整而无法完成的操作,应用程序也必须优雅地失败。
Load-everything-and-check-for-updates模式
在这种情况下,DAL在应用程序启动时将应用程序需要的所有数据加载到浏览器中。如果已经加载了应用程序,则必须更新所有数据,以确保缓存不会过时。从好的方面来说,用户不必等待很长时间来做事情,因为所有操作都是本地操作,但从坏的方面看,如果有大量数据,启动时间可能会相当长。
在任何一种情况下,您都必须解决陈旧的缓存问题,以及将脱机操作持久化到服务器的问题。这意味着,在应用程序启动时,也可能是在应用程序运行期间,您将需要同步回服务器,以保持缓存数据的更新,并与服务器共享您可能具有的任何本地状态,以便其他人看到来自该应用程序实例的更新。
将应用程序处于脱机模式时发生的操作持久化回服务器可能特别棘手,因为该操作涉及的数据在应用程序更新之间发生更改。例如,如果缓存的银行余额已过期,并指示比服务器反映的“真实”状态多得多的钱,则用户可能会在不知情的情况下透支帐户。这是一个极端的例子,但这种可操作的冲突检测需要到位,以处理可能会遇到的更新。
一般来说,如果你有一个既可以在线又可以离线的应用程序,那么编写应用程序,这样应用程序本身就不需要关心了。较低级别的数据层抽象了所有的问题,您的应用程序只需要知道如何处理无法获取所需信息的问题(这是任何好的应用程序,无论是在线还是离线,都应该做到)。
对于购物车,您可能(或希望如此?)拥有比任何个人客户可能放入购物车的产品都多得多的产品。几乎可以肯定的是,将它们全部加载到每个人的浏览器中都是对带宽的巨大浪费,并且会对用户造成如此大的延迟,以至于巨大的带宽成本和销售损失(由于响应时间缓慢)将很快沉没任何业务。根据需要将产品加载到浏览器数据中,如果您愿意,可以加载与购物车中的实际项目相关联的“其他用户也购买”的其他产品。
https://stackoverflow.com/questions/5842837
复制相似问题