0

我有一个 HTML5 应用程序,它包含一些 SQLite API 来创建一个应用程序,它可以:

  • 读取客户端计算机上的 sqlite 数据库(基于用户输入)并将内容加载到内存中。
  • 使用 Leaflet.js / Openlayers.js 从数据库中异步加载图像 blob 以构建断开连接的地图查看器
  • 在一个会话中加载 N 个这些 sqlite 数据库作为传单中的层,其中 N 是客户端计算机在崩溃之前可以在内存中处理的最大数据库数

这将创建一个漂亮干净的应用程序,可以在较新的手机/平板电脑/PC 浏览器上运行,并且无需安装任何东西即可打开/查看内容。我的应用程序通过使用我怀疑是为 node.js 使用的 javascript 库来做到这一点。

我的问题:

  • sqlite 形式的地图数据可能很大(很容易超过 2GB)。我的应用程序可以很好地处理小型 sqlite db,但如果打开单个 sqlite db 超过某个 GB 限制(比方说 > 2.5GB),浏览器会崩溃。
  • 该库将我的 sqlite 数据库作为 javascript 对象加载到内存中
  • 由于客户端缓存存储的限制,我无法通过 IndexedDB “复制”数据库,因为没有足够的缓存空间,尤其是在移动设备上

是否存在不会将整个数据库加载到内存的现有 sqlite javascript 库?有没有办法通过网络工作者线程或产生多个进程,这样我就不会因为这种内存负担而使浏览器进程过载?这种类型的地图数据(图块)使得我在任何给定时间只需要数据库中的 8-12 行。

基本上我能想到的唯一真正的答案就是简单地使数据库不超过这个内存阈值并限制可以加载的数据库总数。我想看看是否还有其他我忽略的选项。

TL-DR; 我正在用 javascript 制作千兆字节大小的对象,结果浏览器崩溃了。我怎样才能让它不这样做?

4

1 回答 1

0

无论您选择哪种机制来存储本地数据,您都将受到 5-100Mb 范围内的缓存大小的限制,这比您想要的要小一个数量级。您可以做的是让用户将他们的数据上传到服务器(您的服务器)并使用 http 服务调用对该服务器进行查询。有一些缓存服务器的实现可以加速结果,但我相信您已经超出了浏览器沙箱中可以完成的操作的限制。

于 2013-09-30T21:29:12.170 回答