我将数据库变量保留在窗口范围内,但现在我开始怀疑事务和对象存储。
myRequest = indexedDB.open('myDatabase')
myRequest.onupgradeneeded = function(response) {
var myDatabase
,myObjectStore
myDatabase = response.target.result
myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true})
}
myRequest.onerror = function(response) {
debugger
}
myRequest.onsuccess = function(response) {
var obj = {}
window.myDatabase = response.target.result // This is ok, right?
window.myTransaction = myDatabase.transaction(['myData'],'readwrite') // But what about this?
window.myObjectStore = myTransaction.objectStore('myData') // And this?
obj.field1 = 'a'
obj.field2 = 'b'
myObjectStore.add(obj)
}

将交易保留在窗口范围内可能没有意义,只要您想引用特定的表格就可以使用。
毕竟,什么时候会将交易视为完成?我只是想到了这一点,而不是每次我需要的时候创建一个新的交易。
答案 0 :(得分:1)
我不建议保留对使用范围之外的事务的引用。我不建议在使用它的范围之外保留对数据库连接的引用。我并不建议在使用范围之外保留对象存储的引用。
保留此类引用几乎没有性能优势。保留此类引用并没有太大的可读性好处。保留此类引用时存在很大的遇到错误的风险。
我强烈建议您在每次需要时创建一个新的数据库连接,每次需要时创建一个新事务,并在每次需要时创建新的对象存储引用。这些应该是可以收集垃圾的短期对象。