2016-12-29 17 views
10

私は、IndexedDBを使用して状態を保存するクライアントサイドのJSアプリケーションを用意しています。正常に動作します。しかし、IndexedDBを頻繁に読み書きしているため、複数のタブが開いているときに状態が矛盾しないようになるため、遅いです。サービスワーカー(または同様のもの)内で長時間実行されるプロセス

私のアイデアは、サービスワーカーの中にすべてのDBアクセス用のものを入れておき、別のタブがデータベースを変更している可能性を気にせずに値をメモリにキャッシュできます。

私のアプリケーションのいくつかの部分が実行に時間がかかることを除いて、それはうまくいくようです。私はサービスワーカーから自分のUIにステータス(「X%done」など)を伝えることができます。しかし、FirefoxとChromeの両方が30秒以上実行されていると、その人を殺すように見える。

この制限はありますか?そうでなければ、何か似たようなことを達成するためのアイディアはありますかシェアードワーカーは、ブラウザのサポートが貧弱であることを除けば、私は思うかもしれませんが、サービスワーカーの後ろの勢いで今は改善することはないと思います。

+0

値の変更が発生したときにすべてのタブを更新しようとしていますか? – guest271314

+0

時々はい、時にはいいえ。 – dumbmatter

+0

'localStorage'、' storage'イベントを使ってみましたか? – guest271314

答えて

2

で行う必要がありますされている場合ServiceWorkersは、あなたの要求のためのプロキシとして使用する必要があります理解し、私が使用して終了共有ワーカー。 EdgeやSafariなどの共有ワーカーをサポートしていないブラウザでは、Webワーカーといくつかのハッキーコードに戻り、一度に1つのタブでアプリを開くことができます。

とにかく私のユーザーの90%がFirefoxまたはChromeにいるので、それは大きな損失ではないと判断します。

私もwrote a library(とりわけ)に共有労働者とWebワーカーで使用されるAPIを正規化するので、私は両方のシナリオで実行されている正確に同じコードを持つ、唯一の違いは、労働者がWorkerまたはSharedWorkerで初期化されているかどうかです。

3

サービス従事者のGoogleドキュメントは、メモリ・キャッシュとしてサービスの労働者を使用することは不可能であることを教えてくれる:

これは、使用しないときに終了し、それが次の必要なときに再起動するので、あなたがグローバルな状態に依存することはできませんですサービスワーカーのオンフェッチおよびオンメッセージハンドラ内で実行されます。永続化して再起動する必要があるという情報がある場合、サービスワーカーはIndexedDB APIにアクセスできます。

サービスワーカーを使用してデータベースにデータを保存し、localStorageを使用してshared cache between pagesを作成することをお勧めします。変更を行っているタブは、localStorage内のキャッシュの更新と、サービスワーカー経由のIndexedDBへの永続化の両方を担当します。

+0

私はすでにIndexedDBにデータを持っており、複数のタブがアクセスできます...ディスクへの読み書きはそれほど遅くありません。 localStorageはおそらくさらに遅いでしょう。もう少し考えた後、私はSharedWorkerが私が望むソリューションだと思っていますが、MS/Appleはそれをサポートするつもりはありません。 – dumbmatter

0

あなた自身が言ったように、SharedWorkersはあなたが必要とするものであるようです。 ServiceWorkersを実装する背後にある勢いが、ブラウザがSharedWorkersをサポートできないと思う理由がわかりません。彼らは2つの異なる種類の獣のようです。

限り、私はあなたのアプリケーションがオフラインと重いものがWebWorkersとSharedWorkers

https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker

+0

http://caniuse.com/#feat=sharedworkers Safariはこれをサポートしていましたが、削除しました。マイクロソフトはそれをサポートする計画はありません。それはサービスワーカーとは異なる獣ですが、サービスワーカーには大きな勢いがあり、少なくともいくつかのユースケースが重なっています。 – dumbmatter

関連する問題