2

我开发这个销售点系统将近一个月,一直在寻找一种方法来为我的应用程序实现离线支持。我想使用 IndexedDB,但在最初应将哪些数据加载到应用程序时遇到问题。

让我给你一个场景。

我开始交易并输入了一些项目。不幸的是,雷神之怒摧毁了一座塔,在我进行交易时导致网络断开。

在这种情况下,我应该如何构建我的应用程序?

A. 将所有条目直接放入 MySQL db 并使用 IndexedDB 进行离线条目。(问题:断开后将永远不会恢复初始条目。)

B. 使用 HTML5 作为收银员交易的主数据库,并在成功结账后仅将其传输到 MySQL 数据库。(问题:大量数据会在系统负载时存储到IndexedDB。)

我正在考虑选项 B,但找不到最小化 MySQL 数据库中预加载数据大小的方法。为什么我需要加载这些数据?唯一能识别物品的是通过物品代码。我在 MySQL 数据库中有数千个项目,将它们加载到 IndexedDB 中是多余的。我需要在输入时获取每件商品的描述、单价、税率、折扣率、促销可用性和库存数量。实时监控也很重要。如果将所有这些数据都加载到 IndexedDB,5mb 是不够的。

非常感谢您的回复!

4

1 回答 1

1

首先它是具有 5mb 限制的本地存储,Indexeddb 没有限制,尽管浏览器有能力限制它,当然你的硬盘空间也是一个限制:)。

第二:如果您真的希望应用程序完全脱机工作,我只会使用 indexeddb。(例如,离线时启动 Web 应用程序并对其进行更改。)

我认为如果连接中断,您想要的只是一个后备,但几分钟后您毕竟可以同步。在这种情况下,我会将数据保存在内存中。这将减轻您保持在线和离线数据库同步的痛苦。当然,如果您真的想提供离线 Web 应用程序,您将需要 indexeddb API。

看看 upshot.js 和BreezeJS。这是用于跟踪您的实体的库。当您在短时间内失去连接时,这些框架也有一些后备(例如将数据保存在内存中)。

简而言之,是否选择 indexeddb 取决于以下需求:

  • 数据需要离线可用
  • 即使您关闭 Web 应用程序并在一段时间后重新启动,更改也必须保留。

希望这能回答你的问题。

于 2013-01-24T10:25:21.803 回答