使用 PouchDB 作为离线栅格地图缓存

2023-12-05

我一直在探索使用 PouchDB 作为栅格地图图块的离线缓存。具体来说,对于传单。我刚刚完成了一些初步测试,我想我会分享这些测试。


我创建了一个“JsFiddle”(实际上我现在更喜欢 CodePen),作为展示如何使用 PouchDB 缓存离线栅格地图图块的游乐场。

http://codepen.io/DrYSG/pen/hpqoD

它使用的算法如下:

  • 测试是否存在 XHR2、IndexedDB 和 Chrome(没有 二进制 blob,但 Base64)。并显示此状态信息
  • 从 Google Drive 获取 PNG 图块的 JSON 清单(我有 171 个 PNG 瓷砖,每个尺寸为 256x256)。清单列出了他们的名字和 尺寸。
  • 将 JSON 清单存储在数据库中
  • MVVM和UI控件来自KendoUI(这次我没有使用他们的 出色的网格控制,因为我想探索 CSS3 网格样式)。
  • XHR2 来自:https://github.com/p-m-p/xhr2-lib/blob/master/test/index.html
  • 我正在使用 PouchDB 的夜间构建
  • 所有文件 PNG 文件都存储在 Google Drive (NASA Blue Marble.
  • 我使用 Safe FME 2013 Desktop 创建了平铺金字塔。http://www.safe.com/fme/fme-technology/fme-desktop/overview

在按下“下载切片”按钮之前检查清单是否已存储在数据库中,并且存在 171 个切片。如果您已经运行了测试,那么您的 PouchDB 将在数据库中已有切片,并且您将收到错误。在这种情况下,请按“删除数据库”,然后重新加载页面。

当您按“下载图块”时,会发生以下步骤:

  • 清单是从数据库中获取的
  • XHR2 Fetch 循环从 Google Drive 获取 PNG blob。
  • 当循环运行时,它开始将 Blob 保存到 PouchDB 中。
  • 注意:获取和保存是在重叠的线程上(想想 协同例程),因为这些(获取和存储)操作正在运行 在单独的线程上异步。
  • 当 Fetch 循环完成时,它会报告经过的时间。
  • 注意:这一次不是纯粹的 Fetch 工作,因为 PouchDB putAttachments() 并行运行。
  • 当所有的图块都被保存后,它将报告完整的统计数据,并且 显示从 PouchDB 获取的图块。
  • Blob-Rate 每个 png 图块的总获取和存储时间

目前 Chrome 运行良好。火狐浏览器速度非常慢。几个月后,当我制作原生 IndexedDB API 时,我发现了这一点。所以我不认为这是 PouchDB 的问题。可能更多是由于 FireFox 使用 SQLlite,这是一种非 SQL 数据库的关系方法。

IE10 无法运行。这很遗憾,因为我之前对 IE10 的测试表明它有一个非常快的 IndexedDB 解决方案:为离线Web应用程序存储图像数据(客户端存储数据库)

  • 关于“浏览器如何存储 IndexedDB 数据”的必读文章http://www.aaron-powell.com/web/indexeddb-storage
  • 注意:FireFox 使用 SQLite 作为 NOSQL IndexedDB。那可能是 性能缓慢的原因。 (斑点单独存储)
  • 注意:Microsoft IE 使用可扩展存储引擎:http://en.wikipedia.org/wiki/Extensible_Storage_Engine
  • 注意:Chrome 使用 LevelDBhttp://code.google.com/p/leveldb/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PouchDB 作为离线栅格地图缓存 的相关文章

随机推荐

  • CSS:如何让两个并排的 DIV 具有自动高度,达到其容器的高度?

    我正在为客户设计一个网站 我试图让两个并排的 DIV 调整为 100 的容器 我已经完成了并排 但我无法让右侧的 DIV 与左侧的高度相同 您可以在这里查看问题 http www campusmomlaundry com 挑战 和 好处 D
  • 仅在 SQL Server 2005 中存储日期

    如何避免存储时间部分datetime在 SQL Server 中 即如果我的值为2011 01 01 00 00 00 000我只想存储2011 01 01 我想确保只存储日期部分 DateTime 数据类型始终存储日期和时间 因此 您只能
  • 是否可以在 web.config 中针对每个控制器设置用户授权? (不能使用AuthorizeAttribute)

    我有一个使用 Windows 身份验证的 Web API 2 应用程序 我有多个控制器 并且在我的 web config 中进行授权
  • Scikit-learn,GMM:从 .means_ 属性返回的问题

    所以显然 means 属性返回的结果与我为每个簇计算的平均值不同 或者我对返回的内容有错误的理解 以下是我编写的代码 用于检查 GMM 如何适合我拥有的时间序列数据 import numpy as np import pandas as p
  • SQL Server 架构有什么好处?

    我不是使用 SQL 数据库 尤其是 SQL Server 的初学者 然而 我主要是一个 SQL 2000 爱好者 而且我一直对 2005 年以后的模式感到困惑 是的 我知道架构的基本定义 但是它们在典型的 SQL Server 部署中真正的
  • 电话铃声响起时暂停歌曲

    我对 Android 开发还很陌生 我希望在电话响起时暂停多媒体 然后在通话结束时重新开始 怎么才能做到这一点呢 你想要的是一个BroadcastReceiver 当电话接到来电时会收到通知 Here你可以找到这方面的教程
  • 如何在运行时切换resx?

    我有第二个 resx 文件 Strings ps ps resx 我想在运行时将代码指向它 每个 resx 都有 Designer cs 和唯一的类名 我必须自己切换 包装这些东西吗 或者有一些内置的方法吗 您需要更改 UI 文化才能使用不
  • 使用 ZipOutputStream 将包含多个 .csv 文件的 .zip 文件返回到浏览器

    首先 我很清楚 Stack OverFlow 上有一个类似的主题 但这并不能解决我的问题 这就是我发这篇文章的原因 目前 我的程序能够根据一定的条件在本地搜索 csv 文件 将它们添加到列表中 然后创建一个 zip 格式的文件 其中包含所有
  • 如何在django中注册后自动登录用户

    这是我目前用于注册的 def register request if request method POST form UserCreationForm request POST if form is valid new user form
  • Python AttributeError:“模块”对象没有属性“SSL_ST_INIT”

    我的一个 Python 脚本失败了 Traceback most recent call last File inspect sheet py line 21 in
  • Android开发中Fragment之间传递对象数组列表

    我正在尝试在 Android 开发中的片段之间传递 arraylist 这是我尝试将事务数组列表传递给另一个片段的部分 switch menuItem getItemId case R id expenses final ExpenseAc
  • SSIS导出到Excel

    使用 SSMS 我创建了一个导出到 Excel 的查询并将其保存为 DTSX 包 将此 DTSX 包导入到 BIDS 项目中 使其每小时运行一次 并导出一个带有时间戳的 Excel 文件 使用表达式的动态名称 当我从 BIDS 运行时 包成
  • 仅限 C++:一元减 0x80000000

    这个问题据说是针对语言律师的 假设有符号整型和无符号整型都是 32 位宽 如 n3337 pdf 草案 5 3 1 8 中所述 0x80000000u 0x100000000u 0x80000000u 0x80000000u 但我找不到这个
  • 使用 JPA EntityManager 批量插入

    有没有一种方法可以让我们使用 JPA EntityManager 进行批量插入 我知道没有直接的方法可以实现这一点 但必须有某种方法来实现这种机制 实际上 对于每个插入操作 它需要 300 毫秒 我想使用批量插入而不是单个插入来减少这个时间
  • 注射器返回未定义的值?

    我试图从我的遗留代码中获取服务并遇到一个奇怪的错误injector 返回未定义 检查这个plnkr 另外 我正在尝试将新的属性值设置回服务 这是否会在不使用监视的情况下反映到范围 非常感谢您 非常感谢任何指点或建议 您试图在 DOM 构建之
  • Spring 3 - 访问 jsp 中的 messages.properties

    我是 spring 3 的新手 并且已经被困在这个问题上一段时间了 您知道如何从 jsp 访问 messages properties 吗 例如 在控制器中我为模型设置了一个值 model setError user not found 消
  • Gnuplot 中某些特定值的不同颜色的颜色条

    我正在使用 Gnuplot 生成直方图 但如果值高于 低于特定值 我需要将其中一些颜色着色为另一种颜色 例如 如果值 10 值 20 则将直方图着色为红色 所以我希望图表是这样的 x y color 1 4 绿色的 2 15 黄色的 3 4
  • Java:FloatBuffer 到 OpenGL - wrap() 与 allocate() 与 BufferUtils.createBuffer()

    数据源 float v 工作示例 FloatBuffer buf BufferUtils createFloatBuffer v length buf put v buf flip or buf rewind 现在可以将缓冲区上传到 ope
  • 这个正则表达式不应该工作吗?

    testString something something task type Checkin patt new RegExp something w match patt exec testString document querySe
  • 使用 PouchDB 作为离线栅格地图缓存

    我一直在探索使用 PouchDB 作为栅格地图图块的离线缓存 具体来说 对于传单 我刚刚完成了一些初步测试 我想我会分享这些测试 我创建了一个 JsFiddle 实际上我现在更喜欢 CodePen 作为展示如何使用 PouchDB 缓存离线