2012-02-15 20 views
6

WebキットベースのブラウザでウェブSQLデータベースapiを使用しようとしています。私はasync apiをメインのUIスレッドウェブワーカーで使用しています。どちらのスレッドも同じデータベースにアクセスします(これはsqlite underthehoodです)html5のローカルストレージはブラウザのUIスレッドとWebワーカースレッドで安全に使用できます

すべての動作は正常ですが、時々トランザクションが失われたり、1つのトランザクションが失敗したり、タイミング/競合状態にあるようです。基礎となるsqliteデータベースへのアクセスはスレッドセーフではないようです。

少し背景。私のWebワーカーは、メインuiスレッドからレコードが挿入されている可能性のあるテーブルに対してクエリを実行するだけです。

ローカル/ウェブストレージには、uiスレッドとWebワーカースレッドの両方から安全にアクセスできるものが実際にどこかに記載されていますか?私はどこか読んだことがあるindexeddb apiはスレッドセーフですが、ブラウザのサポートが悪い/存在しないため、私がターゲットとしているブラウザでは(少なくとも私はそう考えています。

http://caniuse.comから任意の洞察力は感謝

+0

私もその可能性はワーカースレッドにローカルストレージにアクセスするためにことを知りませんでしたか? http://stackoverflow.com/questions/6179159/accessing-localstorage-from-a-webworker –

+0

はい、多分正しいでしょう。 WEB SQLデータベースはワーカースレッドからアクセスできるので、間違った前提を作った可能性があります。残念ながら、あなたは2つのブラウザから同じWeb SQLデータベースを開いても、スレッドセーフではないようです。 – paul

+2

WebSQLは廃止予定です - スレッドセーフであっても、使用したくないと思います。まもなくwebWorkersでindexedDBをサポートします。 –

答えて

2

あなたはWebWorkersからのlocalStorageやのsessionStorageを使用することはできませんが受信されるだろう。

両方とも同期動作ですが、単純なデータの書き込みと読み取りでは実際の問題ではありません。この問題はブラウザの起動時に関連性が高くなりますが、それはブラウザの実装上の問題です。

これを見て、それが役立つはずです:http://www.nczonline.net/blog/2012/04/25/the-performance-of-localstorage-revisited/

関連する問題