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

私は、使用されている範囲外のトランザクションへの参照を保持することを推奨しません。私はそれが使用されている範囲外のデータベース接続への参照を保持することをお勧めしません。また、使用されているスコープ外のオブジェクトストアへの参照を保持することはお勧めしません。

このような参照を維持することによるパフォーマンス上の利点はほとんどありません。そのような参照を保持することには、読みやすさのメリットはあまりありません。そのような参照を保持するときにバグに遭遇する大きなリスクがあります。

必要に応じて新しいデータベース接続を作成し、必要なときにいつでも新しいトランザクションを作成し、必要なときに新しいオブジェクトストア参照を作成することを強くお勧めします。これらは、ゴミ収集可能な短命のオブジェクトでなければなりません。

関連する問題