我有一个使用appcaching的离线Web应用程序.我需要提供大约10MB - 20MB的数据,它将保存(客户端)主要由PNG图像文件组成.操作如下:
- Web应用程序下载并安装在appcache中(使用清单)
- 服务器PNG数据文件的Web应用程序请求(如何? - 请参阅下面的替代方案)
- 有时Web应用程序与服务器重新同步,并对PNG数据库进行小的部分更新/删除/添加
- 仅供参考:服务器是JSON REST服务器,可以将文件放在wwwroot中以便提取
这是我目前对处理二进制blob存储的基于客户端的"数据库"的分析
在底部看到更新
- AppCache(通过清单添加所有PNG,然后按需更新)
- CON:PNG数据库项目的任何更改都意味着清单中所有项目的完整下载(真的是坏消息!)
- WebStorage
- PhoneGap和SQLLite
- ZIP文件
- 服务器创建一个zip文件,将其放在wwwroot中,并通知客户端
- 用户必须手动解压缩(至少这是我看到的)并保存到客户端文件系统
- Web应用程序使用FileSystem API来引用文件
- CON:ZIP可能太大(zip64?),创建时间长
- CON:不确定FileSystem API是否总能读出沙箱(我想是这样)
- USB或SD卡(回到石器时代......)
- 在脱机之前,用户将是服务器的本地用户
- 所以我们可以让他插入SD卡,让服务器用PNG文件填充它
- 然后用户将其插入笔记本电脑,平板电脑
- Web应用程序将使用FileSystem API来读取文件
- CON:不确定FileSystem API是否总能读出沙箱(我想是这样)
- 的WebSQL
- CON:w3c放弃了它(非常糟糕)
- 我可能会考虑使用IndexedDB和WebSQL作为后备的Javascript包装器
- FileSystem API
- IndexedDB的
- IE10中的良好支持,FireFox(保存,读取blob)
- 比文件系统更快速,更易于管理(删除,更新)
- PRO:请参阅速度测试:http://jsperf.com/indexeddb-vs-localstorage/15
- 请参阅有关在IndexedDB中存储和显示图像的文章:https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
- CON:我确认Chrome还不支持blob写入(当前的bug,但不清楚何时修复)
- 更新:Chrome开发人员确认他们正在为桌面和Android工作!还没有时间表.
- LawnChair JavaScript包装器http://brian.io/lawnchair/
- PRO:非常干净的IndexedDB,WebSQL或任何数据库的包装器(想想polyfill)
- CON:无法存储二进制blob,只能存储数据:uri(base64编码)(由于解码成本可能导致致命缺陷)
- IndexedDB JQUERY polyFill https://github.com/axemclion/jquery-indexeddb
- Parashuram为原始的IndexedDB接口编写了一个很好的JQUERY包装器 …