2

この POS システムをほぼ 1 か月間開発してきましたが、アプリケーションのオフライン サポートを実装する方法を見つけるのに苦労しました。IndexedDB を使用したいのですが、アプリケーションに最初にロードするデータに問題があります。

シナリオをあげましょう。

トランザクションを開始し、いくつかのアイテムを入力しました。残念ながら、Thor の怒りによってタワーが破壊され、トランザクションの最中にネットワークが切断されてしまいました。

そのシナリオでは、アプリケーションをどのように構築すればよいでしょうか?

A. すべてのエントリを MySQL データベースに直接配置し、オフライン エントリには IndexedDB を使用します。(問題: 切断後に最初のエントリが戻されません。)

B. HTML5 をキャッシャー トランザクションのプライマリ データベースとして使用し、チェックアウトが成功した後にのみ MySQL データベースに転送します。(問題: システム負荷時に大量のデータが IndexedDB に保存されます。)

オプション B を検討していますが、MySQL データベースからプリロードされたデータのサイズを最小化する方法が見つかりません。これらのデータをロードする必要があるのはなぜですか? アイテムを識別する唯一のものは、アイテム コードです。MySQL データベースに何千ものアイテムがあり、それらを IndexedDB にロードするのはやり過ぎです。入力時に、すべての商品の説明、単価、税率、割引率、プロモーションの有無、在庫数を取得する必要があります。リアルタイム監視も重要です。これらすべてのデータが IndexedDB にロードされる場合、5 MB では不十分です。

ご回答ありがとうございます。

4

1 に答える 1

1

まず、5 MB の制限があるローカル ストレージです。ブラウザには制限がありますが、Indexeddb には制限がありません。もちろん、ハード ディスク領域も制限されます :)。

2 番目: アプリケーションを完全にオフラインで動作させたい場合にのみ、indexeddb を使用します。(例: オフラインのときに Web アプリを起動し、変更を加えます。)

必要なのは、接続が切断された場合の単なるフォールバックだと思いますが、数分後には結局同期できます。この場合、データをメモリに保持します。これにより、オンライン データベースとオフライン データベースの同期を維持する手間が軽減されます。もちろん、本当にオフライン Web アプリケーションを提供したい場合は、indexeddb API が必要になります。

upshot.js とBreezeJSを見てください。これは、エンティティを追跡するためのライブラリです。また、これらのフレームワークには、接続が短時間失われた場合のフォールバック (データをメモリに保持するなど) があります。

簡単に言うと、indexeddb を選択するかどうかは、次の必要性に依存します。

  • データはオフラインで利用できる必要がある
  • Web アプリケーションを閉じてしばらくしてから再起動しても、変更は保持されなければなりません。

これがあなたの質問に答えることを願っています。

于 2013-01-24T10:25:21.803 に答える