2017-01-09 73 views
0

我将数据库变量保存在窗口范围内,但现在我开始怀疑事务和对象存储。保持交易开放被认为是一种不好的做法?

myRequest = indexedDB.open('myDatabase') 
 
myRequest.onupgradeneeded = function(response) { 
 
\t var myDatabase 
 
\t \t ,myObjectStore 
 
\t 
 
\t myDatabase = response.target.result 
 
\t myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true}) 
 
} 
 
myRequest.onerror = function(response) { 
 
\t debugger 
 
} 
 
myRequest.onsuccess = function(response) { 
 
\t var obj = {} 
 
\t window.myDatabase = response.target.result // This is ok, right? 
 
\t window.myTransaction = myDatabase.transaction(['myData'],'readwrite') // But what about this? 
 
\t window.myObjectStore = myTransaction.objectStore('myData') // And this? 
 
\t obj.field1 = 'a' 
 
\t obj.field2 = 'b' 
 
\t myObjectStore.add(obj) 
 
}

它可能没有意义保留在窗范围内的事务,使用时要引用一个特定的“表”。

毕竟,交易何时会被视为不完整?我只是想过这个问题,而不是每次需要时都创建一个新的事务。

回答

1

我不建议保留对使用范围之外的事务的引用。我不建议保留对使用范围之外的数据库连接的引用。而且我不建议保留对使用范围之外的对象存储库的引用。

保持此类参考性能的好处很少。保留这些参考文献对可读性没有太大的好处。保留这些引用时遇到错误的风险很大。

我强烈建议您在每次需要时创建一个新的数据库连接,每次需要时创建一个新的事务,并在每次需要时创建新的对象库引用。这些应该是垃圾收集的短期对象。

相关问题