前端自动保存功能,保存到本地,取值优先取缓存的,换了电脑数据同步问题?

 

问题描述:

前端自动保存功能,监听表单数据改变然后保存到本地,如果本地有值的话就去本地的值,没有值的话取后端返回的数据,但是如果现在A电脑和B电脑如果打开了同一个表单,A补充了数据并且提交了,但是由于优先取得是缓存的数据,B电脑回显的值和A提价的值不一致。


 

第 1 个答案:

1.用WebSockets
2.前端定期检查服务器的数据


 

第 2 个答案:

你这个本地数据时效性重要吗?不重要的话就设置一个过期时间,本地的数据有效期只有1小时,如果过期了了则再从后端获取.

再或者即是将数据存到缓存数据库redis中实现缓存共享.


 

第 3 个答案:

其实不光时表单打开时的取值时本地数据会和服务器最新数据有差异。
在表单打开之后,如果有其他人有提交新数据,在一开始的对比其实会通过,所以在用户A(A电脑)打开表单到提交表单这段操作时间内,其他用户由提交修改,都会被用户A晚提交的数据覆盖。

如果你不想弄得太麻烦,就可以在打开时和评论一样,对比一下修改时间,但并不靠谱。
因为可能出现这样的情况:

  • 用户A在11点20分修改了表单的A数据缓存在了本地;
  • 用户B在11点21分修改了表单的B数据并且提交到了服务器中。

并不是同一个数据但是服务端的数据修改时间会晚于本地时间,造成原本A在本地修改的数据被服务端数据覆盖。

所以可以调整为用户修改了某个属性值之后再缓存在本地,如果没有修改则不保存。提交时也是一样,修改了什么值则提交什么值,过滤掉没有修改的值,这样就算其他用户有修改,只要不是修改的同一项数据,都不会被不小心覆盖。

如果想要做的麻烦一些,可以参考很多在线文档的协同编辑模式,使用WS来同步各个用户之间的操作。


a=[78,187,30]b=[78,186,185,25,30]c=[78,187,186,185,25,30] //想获得的结果a=[1,2,3,4,5]b=[1,6,7,8,3,9,5]c= ...