2017-01-09 42 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

我不建議保留對使用範圍之外的事務的引用。我不建議保留對使用範圍之外的數據庫連接的引用。而且我不建議保留對使用範圍之外的對象存儲庫的引用。

保持此類參考性能的好處很少。保留這些參考文獻對可讀性沒有太大的好處。保留這些引用時遇到錯誤的風險很大。

我強烈建議您在每次需要時創建一個新的數據庫連接,每次需要時創建一個新的事務,並在每次需要時創建新的對象庫引用。這些應該是垃圾收集的短期對象。

相關問題