存储脱机Web应用程序的图像数据(客户端存储数据库) [英] Storing Image Data for offline web application (client-side storage database)
问题描述
我有一个使用appcaching的离线Web应用程序。我需要提供大约10MB - 20MB的数据,它将保存(客户端),主要由PNG图像文件组成。操作如下:
- Web应用程序在appcache中下载并安装(使用清单)
- 有时,Web应用会与服务器重新同步,并会对PNG数据库进行小部分更新/删除/添加操作。
- FYI:服务器是一个JSON REST服务器,可以将文件放入wwwroot中以便取出
这是我的对处理二进制BLOB存储的基于客户端的数据库的当前分析
底部的SEE UPDATE
- AppCache (通过清单添加所有PNG,然后根据需要更新)
- CON: PNG数据库项目将意味着完全下载清单中的所有项目(真的是坏消息!)
- WebStorage $ CON:为JSON存储而设计
- CON:只能通过base64存储blob编码(可能是由于解码成本造成的致命缺陷)
- CON:webStorage的硬性限制为5MB http://htmlui.com/blog/2011-08-23-5-obscure-facts-about-html5-localstorage .html
PhoneGap& SQLLite
- CON:赞助商会拒绝它作为需要认证的原生应用程序
>
ZIP文件
- 服务器创建一个zip文件,将其放入wwwroot中,并通知客户端
- 用户必须手动解压(至少我是这么看的)并保存到客户端文件系统中
- Web应用程序使用FileSystem API来引用文件
- CON:ZIP可能太大(zip64?),需要很长时间才能创建
- CON:不确定FileSystem API是否总能读出(我认为是这样的)
USB或SD卡(回到石器时代... 。)
- 用户在离线前会在服务器本地。
- 因此,我们可以让他插入SD卡,让服务器填充PNG文件
- 然后用户将其插入笔记本电脑,平板电脑
- Web应用程序将使用FileSystem API阅读文件
- C ON:不确定FileSystem API是否可以始终读出沙箱(我认为是这样)
WebSQL
- CON:w3c放弃了它(非常糟糕)
- 我可能会考虑使用IndexedDB和WebSQL的Javascript包装器作为后退
FileSystem API
- Chrome支持读/写blob
- CON:不清楚IE和FireFox(IE10,具有非标准msSave)
- caniuse.com报告IOS和Android支持(但是,这又只是JSON的r / w,还是包括用于编写的完整blob API?
- CON:FireFox人不喜欢FileSystem API&不清楚他们是否支持保存blob: https:/ /hacks.mozilla.org/2012/07/why-no-filesystem-api-in-firefox/
- PRO:很快根据jsperf的bloed IndexedDB http://jsperf.com/indexeddb-vs-localstorage/15(第2页)
IndexedDB
- IE10中的良好支持,FireFox(保存,读取blob)
- 比文件系统更快速,更易于管理(删除,更新)
- PRO:查看速度测试: http://jsperf.com/indexeddb-vs-localstorage/ 15
- 请参阅有关在IndexedDB中存储和显示图像的文章: https:// hac ks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
- CON:我确认Chrome尚不支持blob写入(目前的错误,但不清楚它何时将被修复)
- 更新:Chrome开发者确认他们正在为桌面和Android工作!没有时间限制。
lawnchair /rel =noreferrer> http://brian.io/lawnchair/
- PRO:非常干净的IndexedDB,WebSQL包装器或者你拥有的任何数据库(想想polyfill)
- CON:不能存储二进制blob,只能是数据:uri(base64编码)(由于解码成本的原因可能是致命缺陷)
IndexedDB JQUERY polyFill https://github.com/axemclion/jquery-indexeddb
- Parashuram为原始文件写了一个很好的JQUERY包装器IndexedDB接口
- PRO:极大地简化了使用IndexedDB的操作,我希望为Chrome FileSystemAPI添加填充/填充元素。
- CON:应该处理斑点,但是我无法让它工作
idb.filesystem.js http://ericbidelman.tumblr.com/post/21649963613/idb-filesystem- js-bring-the-html5-filesystem-api
- Eric Bidelman @ Google编写了一个经过充分测试的PolyFill FileSystem API,它使用了Indexed DB作为后退
- PRO:FileSystem API非常适合存储blob
- PRO:适用于FireFox和Chrome
- PRO:非常适合与基于云的CouchDB同步
- CON:没有明确原因,但它不适用于IE10
PouchDB JavaScript库 http://pouchdb.com/
- 适用于同步本地数据库的CouchDB使用WebSQL或IndexedDB(但不是我的问题)
- CON:NO缺点,PouchDB现在支持所有最新浏览器的二进制blob(IE,Chrome,Fi refox,手机上的Chrome等)以及许多旧版浏览器。当我第一次发布这篇文章时,情况并非如此。
- CON: PNG数据库项目将意味着完全下载清单中的所有项目(真的是坏消息!)
- CON:赞助商会拒绝它作为需要认证的原生应用程序
- 服务器创建一个zip文件,将其放入wwwroot中,并通知客户端
- 用户必须手动解压(至少我是这么看的)并保存到客户端文件系统中
- Web应用程序使用FileSystem API来引用文件
- CON:ZIP可能太大(zip64?),需要很长时间才能创建
- CON:不确定FileSystem API是否总能读出(我认为是这样的)
- 用户在离线前会在服务器本地。
- 因此,我们可以让他插入SD卡,让服务器填充PNG文件
- 然后用户将其插入笔记本电脑,平板电脑
- Web应用程序将使用FileSystem API阅读文件
- C ON:不确定FileSystem API是否可以始终读出沙箱(我认为是这样)
- CON:w3c放弃了它(非常糟糕)
- 我可能会考虑使用IndexedDB和WebSQL的Javascript包装器作为后退
- Chrome支持读/写blob
- CON:不清楚IE和FireFox(IE10,具有非标准msSave)
- caniuse.com报告IOS和Android支持(但是,这又只是JSON的r / w,还是包括用于编写的完整blob API?
- CON:FireFox人不喜欢FileSystem API&不清楚他们是否支持保存blob: https:/ /hacks.mozilla.org/2012/07/why-no-filesystem-api-in-firefox/
- PRO:很快根据jsperf的bloed IndexedDB http://jsperf.com/indexeddb-vs-localstorage/15(第2页)
- IE10中的良好支持,FireFox(保存,读取blob)
- 比文件系统更快速,更易于管理(删除,更新)
- PRO:查看速度测试: http://jsperf.com/indexeddb-vs-localstorage/ 15
- 请参阅有关在IndexedDB中存储和显示图像的文章: https:// hac ks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
- CON:我确认Chrome尚不支持blob写入(目前的错误,但不清楚它何时将被修复)
- 更新:Chrome开发者确认他们正在为桌面和Android工作!没有时间限制。 lawnchair /rel =noreferrer> http://brian.io/lawnchair/
- PRO:非常干净的IndexedDB,WebSQL包装器或者你拥有的任何数据库(想想polyfill)
- CON:不能存储二进制blob,只能是数据:uri(base64编码)(由于解码成本的原因可能是致命缺陷)
- Parashuram为原始文件写了一个很好的JQUERY包装器IndexedDB接口
- PRO:极大地简化了使用IndexedDB的操作,我希望为Chrome FileSystemAPI添加填充/填充元素。
- CON:应该处理斑点,但是我无法让它工作
- Eric Bidelman @ Google编写了一个经过充分测试的PolyFill FileSystem API,它使用了Indexed DB作为后退
- PRO:FileSystem API非常适合存储blob
- PRO:适用于FireFox和Chrome
- PRO:非常适合与基于云的CouchDB同步
- CON:没有明确原因,但它不适用于IE10
- 适用于同步本地数据库的CouchDB使用WebSQL或IndexedDB(但不是我的问题)
- CON:NO缺点,PouchDB现在支持所有最新浏览器的二进制blob(IE,Chrome,Fi refox,手机上的Chrome等)以及许多旧版浏览器。当我第一次发布这篇文章时,情况并非如此。
查看数据:PNG的uri编码我在以下位置创建了一个示例: http://jsbin.com/ivefak/1 / b> 期望/有用/不需要的功能 IndexedDB实施 我的当前结果 最终结果作为回答发布如下 PouchDB现在支持所有最新浏览器(IE,Chrome,Firefox,Chrome on mobile等)以及许多旧版浏览器的二进制blob。当我第一次发布这篇文章时,并不是这种情况。 结果PNG slippy maps的离线blob缓存 测试 从网络服务器提取 存储 显示 结果 I have an offline web application using appcaching. I need to provide it about 10MB - 20MB of data that it will save (client-side) consisting mainly of PNG image files. The operation is as follows: Here is my current analysis of client-based "databases" that handle binary blob storage NOTE: to see a data:uri encoding of PNG I created an example at: http://jsbin.com/ivefak/1/edit Desired/Usefull/Uneeded Features IndexedDB Implementations My Current Results FINAL Results posted below as answer PouchDB now supports binary blobs for all recent browsers (IE, Chrome, Firefox, Chrome on mobile, etc.) as well as many older browsers. That was not the case when I first did this post. Results Offline blob cache for PNG slippy maps Testing Fetch from web server Storage Display Results 这篇关于存储脱机Web应用程序的图像数据(客户端存储数据库)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
更新
SEE UPDATE at Bottom
Update