Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS";“升级”;模式_Javascript_Local Storage_Upgrade - Fatal编程技术网

Javascript JS";“升级”;模式

Javascript JS";“升级”;模式,javascript,local-storage,upgrade,Javascript,Local Storage,Upgrade,在客户端(例如,localStorage)上存储了某些内容(在我的示例中是一个过滤器),并且需要每个用户/版本运行一次脚本来迁移存储的数据时,是否存在任何模式。例如,最初有一个过滤器保存在localStorage中,带有一个键myFilter,经过一段时间后,您决定需要为每个环境分离过滤器,因此需要分离dev myFilter,train myFilter,等等。您更新代码以使用依赖于环境的过滤器,但也有一些用户拥有旧的myFilter,您希望在下一个部署版本中运行脚本,该脚本将更新已保存过滤器

在客户端(例如,
localStorage
)上存储了某些内容(在我的示例中是一个过滤器),并且需要每个用户/版本运行一次脚本来迁移存储的数据时,是否存在任何模式。例如,最初有一个过滤器保存在
localStorage
中,带有一个键
myFilter
,经过一段时间后,您决定需要为每个环境分离过滤器,因此需要分离
dev myFilter
train myFilter
,等等。您更新代码以使用依赖于环境的过滤器,但也有一些用户拥有旧的
myFilter
,您希望在下一个部署版本中运行脚本,该脚本将更新已保存过滤器的密钥(如果有)

问题是-这方面的模式/最佳实践是什么?

我不知道“最佳实践”,但显而易见的技术解决方案,就像任何API或存储格式一样,是在数据旁边存储一个版本号。如果您从一开始就没有这样做,那么假设不存在时version==1

如果数据结构在不同版本之间是唯一的,可以通过检查来确定版本,则可以避免这种情况

无论哪种方式,只要发现用户的数据是旧格式的,就可以执行转换


这样做的缺点是你必须不断检查;对于web应用程序来说,这不太可能是一个瓶颈,但是如果您能够从一开始就使数据向前兼容,那么您就可以为每个请求节省一点处理时间。但要使数据有用,您必须阅读它,因此,只要您希望保持向后兼容性,就进行一点分支也不太可能是一个大问题。

如果数据不断变化,那么最好不要使用localStorage。@Pogrindis我使用的是Redux,对于初始状态,它会检查localStorage,如果设置了什么,就会使用它。为什么不使用localStorage是明智的?我不喜欢每次都运行检查,而且可能存在多个版本差异+多个版本控制的数据结构,这样会变得混乱。我正在考虑一个单独的文件,您可以在其中指定-对于这个版本,我们运行这个脚本,它将相应地转换数据,但当用户错过一些升级并且您无法直接从v1升级到v8时,仍然存在一个问题-您需要一步一步地执行此操作,因此每次都必须运行这些检查:(