我正在编写一个我想在iOS应用商店中发布的HTML5应用程序。使用PhoneGap或包装在UIWebView控件中。
我对在应用程序存储数据方面有哪些选择感到困惑。
是否正在使用适合在此类应用程序中存储应用程序数据的localStorage,WebSQL或IndexedDB技术?我将存储JSON和XML数据。
请记住,如果用户无意中删除了这些数据,那么他们就会丢失工作,这显然是我不希望发生的。
我知道减轻这种风险的唯一真正方法是将数据同步到“云”或其他在线系统 - 我可以在将来的版本中执行此操作,但现在不能。最初我只是想在本地存储数据,如果这是一种合理稳定的做事方式。
据我了解,清除cookie时,浏览器还会清除所有localStorage数据。所以那些规则已经出来了,因为我可以看到用户偶然这样做了。
WebSQL看起来相当不错 - 用户无法在iOS上无意中删除它。他们实际上必须进入浏览器设置并手动删除数据库。
但是WebSQL的缺点是未来我可能不会支持它。
使用IndexedDB,我不清楚该数据何时被清除。删除cookie时是否也会删除,或者Safari设置中的“数据库”选项是否会控制它?
IndexedDB是更好的解决方案,因为它将来会比WebSQL提供更好的支持吗?
是否有其他更合适的解决方案我不知道?
答案 0 :(得分:11)
如果你正在使用PhoneGap(或AppMobi - 我工作的地方),你的数据将被分段到该应用程序。用户无法进入Safari并清除浏览器数据/ cookie,并在您的应用中发生这种情况。他们可以删除它的唯一方法是删除应用程序。
我认为IndexedDB不可用。 Window.localStorage是(5兆,但我认为它可以增长),这是一个KVP系统。
我没有看到他们放弃WebSQL几年。 HTML5规范尚未批准,因此事情可能会再次发生变化。
由于您只是存储字符串,因此您可以查看像Lawnchair这样的库,它们将使用不同的适配器(localStorage,WebSQL等)来存储您的数据,因为它看起来没有复杂的数据集。
答案 1 :(得分:7)
localStorage
(aka Web Storage)和WebSQL。
本文档位于W3C推荐的轨道上,但规范工作已停止。规范陷入了僵局: 所有感兴趣的实现者都使用了相同的SQL后端(Sqlite), 但我们需要多个独立的实现来继续 标准化路径。
就移动浏览器而言,IndexedDB是 - 截至2013年12月 - 仅支持Android 4.4(意味着没有iOS Safari,Opera Mini /移动版或广泛的Android浏览器支持)。
有关最新的兼容性表,请参阅caniuse.com。