我有一个离子应用程序和一个parse.com后端。我的用户可以在练习程序上执行CRUD功能,更改程序的各个方面,包括添加,删除,编辑其中的练习。
我对何时保存,何时调用服务器以及可以在服务/ $rootScope
中保存多少数据感到困惑?
典型的用户流如下:
- 创建程序和客户端(在服务器上同时创建和存储数据在
$localStorage
中)。 - 用户转到编辑屏幕,他们可以在程序中的所有练习上执行CRUD功能。当前,我对每个功能执行服务器调用,因此它已同步到备份。
- 用户可能会返回并选择一个不同的程序 - 下载数据并再次存储LocalStorage。
我的问题是如何确保我的用户数据始终保存到服务器上并为他们提供响应迅速的用户体验。
具有定期触发保存的超时功能是正常的吗?在手机上,对服务器的通话量对于连接差而很痛苦。
欢迎与ionic和parse.com进行完整的本地/远程同步的任何想法。
根据我的经验,最好的思考方法如下:
-
localStorage
本质上是一个缓存层,如果最新情况很棒,因为它可以减少网络调用。但是,它仅限于当前会议,应视为挥发性存储。 -
您的服务器是您的真实来源,因此,应始终更新。
这意味着,对于阅读,LocalStorage很棒,如果没有更改,您就不需要获取数据一百万次。对于写信,请始终信任您的服务器以进行长期存储。
我建议的模式是,在负载时,获取任何相关数据并将其保存到本地存储中。任何进一步的读取都应来自本地存储。编辑,应该直接进入服务器,然后成功地将这些更改写入LocalStorage。这样,如果您在保存上有错误,则可以通知用户,并且/或可以将LocalStorage用作队列继续尝试将数据发布到服务器上,直到完全成功为止。
这称为"离线同步"或有时" 4种方法数据绑定"。关键是在本地缓存数据并将其与远程后端同步。这是一个非常普遍的需求,但是解决方案并不是那么普遍……理想流将遵循以下理念:
- 保存数据本地
- 尝试同步与服务器(执行自动 Merges )
和
- 定期同步,以及一个计时器,也许是一些"连接"事件
这很难手动实现。如果搜索模块很长时间,而我唯一想到的模块并不真正适合您的需求(成为他们经常是后端提供商,可以为您提供前端连接器;您已经有了后端的意见),但是他们在这里他们无论如何:
- strongloop的loopback.io
- 流星
- pouchdb