请问我以前是否曾问过这个问题。我敢肯定这是一个经典的问题。但是,尽管如此,我还是会问,因为我找不到解决方案。
这是一个使用不同媒体的单个用户的时间线性示例,遇到了这个问题:
主要有两个问题:
1.该应用程序不会启动同步。除非用户手动单击刷新,否则它将保持不同步。
2.合并这两个音符很困难,因为它不像最后一个音符那样简单,而是权威的,但是我认为它需要将两者优雅地融合在一起(想想github diff)
解决此类问题的已知策略是什么?我最初的研究指向jsdiff之类的东西,它着重说明了差异,但并未考虑到与猫鼬的同步和修订分辨率。
TLDR; 我有多个笔记。我需要合并它们。它们可能会有所不同。
答案 0 :(得分:2)
过去,我不得不处理类似的问题(同步脱机事件)。 在这里,我们通常所做的工作希望对您有所帮助。
- 该应用程序未启动同步
您要最小化可能出现同步问题的时间。
这可以通过触发同步观察navigator.online的状态来解决。 1.当它更改为false时,开始缓冲用户编辑。 2.当更改为true时,请从服务器中提取新更改,然后执行缓冲的操作。
- 合并两个注释...
这可能是非常具有挑战性的。这实际上取决于数据类型,以及同步错误的容忍度。
我们发现,最好是在尽可能靠近源的地方处理同步问题。我们在客户端包含了同步问题,因此损坏的数据将永远不会到达数据库。
同步本身的行为类似于git merge。
当脱机设备提取更新的数据时,它将尝试合并缓冲的操作,在之前将其发送到服务器。
我希望能帮上忙。
答案 1 :(得分:0)
这是一个常见问题,尤其是对于移动环境。一种有趣的方法是在渐进式Web应用程序中使用Service Workers。这些将保留您的网络请求,直到用户再次联机,然后在重新联机后对其进行处理。
这篇文章可以比我在这里更详细地解释这种方法:
https://developers.google.com/web/updates/2015/12/background-sync
注意:这是2015年写的,在这方面进展很大。 iOS尚无法使用Service Worker,但预计将在未来几年或几年内为他们提供支持。