Cordova 持久且同步的存储
Cordova 持久且同步的存储
我使用Cordova开发了一个混合应用程序。我使用了localStorage来在设备上保存一些数据。现在我需要更好且持久的存储方法。另外,我正在寻找一个同步库。你有什么建议吗?
我刚刚找到了Persisto (https://github.com/mar10/persisto)。我可以在Cordova中使用它吗?
问题的出现原因:
- Cordova应用在iOS上本地持久化存储的数据(如localStorage、WebSQL、IndexedDB)被视为缓存数据,当设备存储空间不足时,这些数据可能会被清除。
问题的解决方法:
- 对于可靠的持久化存储,可以使用cordova-sqlite-storage插件来使用本地SQLite数据库。
- 可以使用localForage作为对cordova-sqlite-storage的简单接口,使用cordovaSQLiteDriver适配器。
- 如果内容以文件为基础,可以使用cordova-plugin-file将其存储到可靠的存储位置。
- 也可以使用Firebase在设备在线时备份数据。
Cordova持久且同步的存储问题的出现是因为在iOS上,Cordova应用中本地持久化存储的数据(如localStorage、WebSQL、IndexedDB)被视为缓存数据,当设备存储空间不足时,这些数据可能会被清除。
对于这个问题,有一些解决方法。首先,为了实现可靠的持久化存储,可以使用cordova-sqlite-storage插件来使用本地SQLite数据库。这可以确保数据不会因为设备存储空间不足而丢失。
此外,还可以使用localForage作为对cordova-sqlite-storage的简单接口,使用cordovaSQLiteDriver适配器。这样可以更方便地使用SQLite数据库,并且保持数据的持久性。
如果内容以文件为基础,还可以使用cordova-plugin-file将其存储到可靠的存储位置。这可以确保数据在设备存储空间不足时不会被清除。
对于想要使用同步存储的开发者来说,需要了解的是,目前没有同步且持久的存储库。这是因为数据库和Cordova的JS本地桥接接口本质上是异步的。如果简单地开发一个同步存储方法这么简单的话,早就已经实现了。因此,最好的解决方法是将代码重新设计为使用异步存储机制。
当然,对于决定继续使用localStorage的开发者来说,需要注意的是在iOS上可能会清除这些数据。因此,如果数据的持久性对于应用的功能很重要,建议使用上述的可靠存储方法。
最后,开发者提到会在设备在线时使用Firebase进行数据备份。然而,对于这种备份方式,我们只能祝他好运了。
还是,这并不是什么复杂的技术问题。
你是对的:这是计算机科学问题,而不是设计和开发航天器的问题-也许你把它们混淆了?我会在设备在线时将它们备份到Firebase上。
祝你好运……
Cordova持久性和同步存储的问题出现的原因是因为当前需要更好和持久的存储方法。尽管可以使用indexeddb进行更好的持久性存储,但所有的API都是异步的,并且实现起来非常复杂。因此,作者正在寻找一个同步库来解决这个问题。
作者询问有没有任何建议,可以使用jsstore来同步执行数据库代码。它提供类似于SQL的API,并且所有的API都是同步的。因此,你不需要担心无法获得最新的数据等问题。如果按照顺序调用update和select API,那么首先会执行update API,然后执行select API。这并不会使你的代码变成异步,它只会按照你调用的顺序执行代码。
如果你只需要存储键值对,可以使用KeyStore。在这里,你不需要进行任何设置。
关于是否能在IOS app升级后保留JSstore数据,indexeddb和localStorage是完全不同的。可以参考以下链接了解更多信息:softwareengineering.stackexchange.com/questions/219953/…,stackoverflow.com/questions/5924485/…。JsStore是一个indexeddb封装库,它使indexeddb易于使用。因此,是否保留indexeddb数据取决于不同的操作系统。对于这种情况,你可以定期与服务器同步或将数据存储在json文件中。
官方cordova文档中指出,localStorage的数据会被清除,但没有关于indexeddb数据清除的任何信息。可以查看官方文档的缺点部分。
还有一个用户评论提到,当iOS设备的存储空间不足时,Cordova应用程序的Webview会清除localStorage、IndexedDB和WebSQL数据。可以通过在iOS设备上安装一个包含这些数据的Cordova应用程序,并将设备填满电影来测试。观察到设备上出现"Cleaning..."的字样,然后重新打开应用程序,所有的数据都会消失。因此,作者建议将所有重要数据存储在本地的SQLite数据库中,这样可以避免iOS的清除问题。
Cordova持久性和同步存储问题的原因是当前需要更好和持久的存储方法。解决方法是使用同步库,如jsstore或KeyStore,来执行数据库代码。对于indexeddb数据的保留取决于不同的操作系统,因此可以考虑定期与服务器同步或将数据存储在json文件中。同时,需要注意在iOS设备上,localStorage、IndexedDB和WebSQL数据可能会被清除,因此建议将重要数据存储在本地SQLite数据库中。