为什么 indexedDB 使用 "version"?
Why does indexedDB use a "version"?
我刚刚学习indexedDB,这是我对建立数据库的理解。您调用 .open(dbName)
获取数据库实例。如果用户计算机上不存在此名称的数据库(例如,如果这是他们第一次访问该站点),那么这将触发一个 onUpdateNeeded 事件,因此您应该在该事件中执行初始化操作,例如创建 ObjectStores。
现在,您还可以传入一个版本 - .open(dbName, version)
- 如果数据库存在但使用较低版本,则无论如何都会强制执行 onUpdateNeeded 事件。现在,我可以看到它的实用性了……但是为什么要有一个整数参数呢?如果 "version" 参数的目的是强制更新,为什么不直接使用 forceUpdate
标志呢?为什么要有一个整数版本参数,因此您需要在调试代码时将其递增到更高版本,大概经过多天调试后达到版本 156?
除了强制更新之外,是否在某些我不知道的功能中使用了该版本?如果没有,其背后的基本原理是什么?此外,您是打算在开发过程中不断更改版本,但在应用发布后保持不变,还是您应该在应用的整个生命周期中不断更改它?
单调递增的整数允许这种模式:
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;
// ...
};
这是一个很常见的模式。显然,可以想象这是手动完成的——开发人员可以在特殊元数据 table 中跟踪版本——而不是将其写入标准。但它很常见,它是内置的,类似于索引和密钥生成器。
有一个有效的论点,这使得 API 对于初学者来说太复杂了,但如果没有时间机器,它就有点没有实际意义了。
...
如果您在本地调试并且更改仅限于您的机器,那么 deleting/recreating 数据库可能比为每个小更改编写模式升级逻辑更容易。
我刚刚学习indexedDB,这是我对建立数据库的理解。您调用 .open(dbName)
获取数据库实例。如果用户计算机上不存在此名称的数据库(例如,如果这是他们第一次访问该站点),那么这将触发一个 onUpdateNeeded 事件,因此您应该在该事件中执行初始化操作,例如创建 ObjectStores。
现在,您还可以传入一个版本 - .open(dbName, version)
- 如果数据库存在但使用较低版本,则无论如何都会强制执行 onUpdateNeeded 事件。现在,我可以看到它的实用性了……但是为什么要有一个整数参数呢?如果 "version" 参数的目的是强制更新,为什么不直接使用 forceUpdate
标志呢?为什么要有一个整数版本参数,因此您需要在调试代码时将其递增到更高版本,大概经过多天调试后达到版本 156?
除了强制更新之外,是否在某些我不知道的功能中使用了该版本?如果没有,其背后的基本原理是什么?此外,您是打算在开发过程中不断更改版本,但在应用发布后保持不变,还是您应该在应用的整个生命周期中不断更改它?
单调递增的整数允许这种模式:
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;
// ...
};
这是一个很常见的模式。显然,可以想象这是手动完成的——开发人员可以在特殊元数据 table 中跟踪版本——而不是将其写入标准。但它很常见,它是内置的,类似于索引和密钥生成器。
有一个有效的论点,这使得 API 对于初学者来说太复杂了,但如果没有时间机器,它就有点没有实际意义了。
...
如果您在本地调试并且更改仅限于您的机器,那么 deleting/recreating 数据库可能比为每个小更改编写模式升级逻辑更容易。