保持交易开放被视为不良做法?

时间:2017-01-09 18:00:20

标签: indexeddb

我将数据库变量保留在窗口范围内,但现在我开始怀疑事务和对象存储。



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)
}




将交易保留在窗口范围内可能没有意义,只要您想引用特定的表格就可以使用。

毕竟,什么时候会将交易视为完成?我只是想到了这一点,而不是每次我需要的时候创建一个新的交易。

1 个答案:

答案 0 :(得分:1)

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

保留此类引用几乎没有性能优势。保留此类引用并没有太大的可读性好处。保留此类引用时存在很大的遇到错误的风险。

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