angular - 在网络应用程序中处理离线数据

标签 angular ngrx

当前堆栈:Angular 1.6、BreezeJS(处理离线/在线)、.net web api、azure sql

转向堆栈:Angular 5、NgRx(处理离线/在线)、.net core Web API、Azure SQL

背景: 我有一个必须离线/在线工作的网络应用程序。当用户处于互联环境中时,我使用 Web Worker 来提取他们正在处理的项目的最新数据,并将该数据存储在本地存储中。当他们离线时,我从本地存储中推送/提取数据,以允许用户离线工作。目前,该系统是使用 Angular 1.6 构建的,BreezeJS 在离线时处理元数据实体,并在重新上线后进行后续同步。这很有效,因为 BreezeJS 在处理所有离线元数据和随后的同步方面做得非常出色,而且非常透明和一致。

我需要将系统升级到 Angular 5,并且想从堆栈中删除 BreezeJS(主要是因为他们没有为 Angular 构建 typescript 更新,而且似乎没有任何计划创建一个),但我没有确定如何处理离线数据以及如何将离线数据同步到线上。我目前的计划是用 NgRx 代替 BreezeJS。

我正在考虑使用 Service Worker 在离线时将请求转储到本地存储的队列,同时更新当前存储(通过不同的操作使用 ngrx,将记录表示为未确认),无论如何。然后,当用户重新上线时,我运行请求队列,然后在响应正常进入时更新用户的本地存储。我还会更新我的网络工作人员,以便他们在数据检索上推送操作,更新 ngrx 存储,然后将其内容转储到本地存储,以便在需要时可以离线使用。

问题: 我意识到我本质上是在迫使 NgRx 离线/在线工作。这是 NgRx 库的良好用法,还是将该库脱离上下文并将其用于从未打算用于的用途?

是否有一个现有的生产就绪和维护的库,用于处理离线数据并在 Angular 应用程序中同步?

提前感谢您的帮助。

最佳答案

哇哦。这里的很多内容都是极其错误的。

BreezeJS 适用于所有版本的 Angular。它已用 TypeScript 重新编码,现在作为 TypeScript 库进行维护。我们在实践中广泛使用它,在最新的 Angular 版本中构建大型企业应用程序。它由其原始作者维护。

我应该知道。我是 IdeaBlade(Breeze 的制造商)的创始人兼现任总裁。

我对 ngrx 也了解很多。您可以序列化存储的状态并恢复它,但这样做并不简单,并且不像 Breeze 实体缓存那么容易。您可以 try catch Action 流并重播它们。这也将充满困难。

您听起来不像尝试过 ngrx 来管理实体的人。对于除了最小的实体模型之外的任何模型来说,这都是一项艰巨的任务。在迈出这一步之前,你最好先学习一下。我是作为一个正在开创一个库来使 ngrx 实体管理更容易(查找 ngrx-data)的人这么说的。

但在我看来,最重要的障碍是 ngrx 或 redux 中完全缺乏对实体关系的支持,这对于关系实体模型来说至关重要,也是 Breeze 的核心优势之一。

如果您习惯了 Breeze,请在放弃它之前非常非常仔细地观察。

关于angular - 在网络应用程序中处理离线数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034122/

相关文章:

angular - 许多元素上的 ngClass 使网站速度非常慢

javascript - 在时间跨度内收集键盘输入

html - Angular 6 - 如何根据条件禁用 div

Angular Material 对话框和 ngrx

angular - 如何为 Angular Component 中的 ActionsSubject 订阅编写单元测试

angular - 使用ngrx/store更新store的正确方法

javascript - Angular 2 RC5 及更高版本 - 当没有路由匹配时如何显示错误页面?

angular - Angular 的 "unidirectional data flow rule"是什么?

rxjs - @ngrx 选择器并行发射两次

angular - ngrx:在自定义对话框中等待确认或取消