我一直在探索使用 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(使用前将#替换为@)