当前位置:  开发笔记 > 编程语言 > 正文

为什么indexedDB使用"版本"?

如何解决《为什么indexedDB使用"版本"?》经验,为你挑选了1个好方法。

我刚刚学习了indexedDB,这是我对建立数据库的理解.您调用.open(dbName)以获取数据库实例.如果用户的计算机上不存在此名称的数据库(例如,如果这是他们第一次访问该站点),则会触发onUpdateNeeded事件,因此您应该在其中执行初始化操作,例如创建ObjectStores.

现在,您还可以传入一个版本 - .open(dbName, version)- 如果数据库存在但使用较低版本,则会强制执行onUpdateNeeded事件.现在,我可以看到这个的效用......但为什么有一个整数参数?如果"版本"参数的要点是强制更新,为什么不只是有一个forceUpdate标志?为什么有一个整数版本参数,因此在调试代码时需要增加更多,可能在经过多天的调试后达到156版本?

是否在某些功能中使用的版本除了强制更新之外我还没有意识到,如果不是,它背后的基本原理是什么?另外,您是打算在开发期间不断更改版本,但是一旦应用程序发布就保持修复,或者您是否应该在应用程序的整个生命周期中不断更改它?



1> Joshua Bell..:

单调递增的整数允许这种模式:

var open = indexedDB.open('db', 3);
open.onupgradeneeded = function(e) {
  var db = open.result;
  if (e.oldVersion < 1) {
    // create v1 schema
  }
  if (e.oldVersion < 2) {
    // upgrade v1 to v2 schema
  }
  if (e.oldVersion < 3) {
    // upgrade v2 to v3 schema
  }
  // ...
};
open.onsuccess = function() {
  var db = open.result;
  // ...
};

这是一种非常常见的模式.显然,可以想象这是手动完成的 - 开发人员可以在特殊的元数据表中跟踪版本 - 而不是将其载入标准.但它很常见,它是内置的,类似于索引和密钥生成器.

有一个有效的论点,这使得API对于初学者来说太复杂了,但没有时间机器,它有点没有实际意义.

...

如果您在本地进行调试并且更改受限于您的计算机,则删除/重新创建数据库可能比为每个次要更改编写架构升级逻辑更容易.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有