【问题标题】:Cordova Persistent and Synchronous StorageCordova 持久和同步存储
【发布时间】:2017-12-09 21:11:27
【问题描述】:

我使用 Cordova 开发了一个混合应用程序。我使用 localStorage 在设备上保存一些数据。现在我需要更好和持久的存储方法。我也在寻找一个同步库。你有什么建议吗?

我刚刚找到 Persisto (https://github.com/mar10/persisto)。我可以将它与 Cordova 一起使用吗?

【问题讨论】:

    标签: javascript cordova storage synchronous hybrid


    【解决方案1】:

    我刚找到 Persisto。我可以将它与 Cordova 一起使用吗?

    您可以将它与 Cordova 一起使用,但它似乎只是 localStorage 的包装,因此没有比直接使用 localStorage 更好/更持久。

    如果您的 Cordova 应用程序面向 iOS,那么您应该注意,存储在 Webview(localStorage、WebSQL、IndexedDB)中的任何本地持久化数据都被视为缓存数据,因此如果设备存储空间不足,可以随时擦除空间。

    我也在寻找一个同步库。你有什么建议吗?

    TL;DR:我认为您不会找到更好的存储机制的同步接口,因为更持久/可靠的机制本质上都是异步的。 最终,最好硬着头皮重新编写代码以使用异步存储机制。

    对于不会被 iOS 一时兴起擦除的可靠持久存储,您可以通过cordova-sqlite-storage 插件使用本机 SQLite DB。 对于它的简单接口,您可以使用包装器,例如 localForagecordovaSQLiteDriver 适配器。

    或者,如果您的内容更多地基于文件,您可以使用 cordova-plugin-file 将其存储到持久存储位置。

    【讨论】:

    • 我真的不明白我为什么要修改我的 JS 来异步存储 2 行数据。 LocalForage、NativeStorage、SecureStorage 等。它们都是一样的。有几十个异步库。甚至没有一个同步和持久库。这不是航天科技。我将继续使用 localStorage,直到 Cordova 结束这个废话并开发同步方法。无论如何,谢谢。
    • 数据库接口和 Cordova JS-native 桥本质上是异步的。如果只是“开发一个同步方法”那么简单,那么现在已经完成了。您可以继续使用本地存储,但需要注意的是 iOS 可能随时擦除它。
    • 不过,这不是一门火箭科学。也不要担心我的数据。当设备在线时,我将在 Firebase 上备份它们。
    • Still, it's not a rocket science.你说得对:这是计算机科学,而不是航天器的设计和开发——也许你把这两者混淆了? I'm going to back-up them on Firebase when the device is online。祝你好运......
    【解决方案2】:

    现在我需要更好的持久存储方法。

    您可以使用 indexeddb 获得更好的持久性存储。但是所有的api都是异步的,实现起来非常复杂。

    我正在寻找一个同步库。你有什么建议吗?

    您可以使用 jsstore 同步执行 db 代码。它提供了类似api的sql,并且所有的api都是同步的。所以您不必担心无法获取最新数据等。

    所以如果你调用update,依次选择api,然后执行第一个update api,然后选择api。

    同样,它不会使您的代码异步,它只是按照您调用的顺序执行代码。

    在这里查看 - http://jsstore.net/

    如果您正在寻找一个只存储密钥对值的库,那么您可以使用 KeyStore。在这里你不需要做任何设置。

    在此处查看密钥库 - https://github.com/ujjwalguptaofficial/KeyStore

    【讨论】:

    • 感谢您的回答。据我所知,localStorage 和 Indexeddb 非常相似。 JSstore 能否在 IOS 应用更新后存活?
    • indexedb 和 localstorage 完全不同。查看这些以获取更多信息 -softwareengineering.stackexchange.com/questions/219953/…stackoverflow.com/questions/5924485/…。 JsStore 是一个 indexedb 包装器,它只是让 indexedb 易于使用。所以取决于不同的操作系统,升级时是否保留indexeddb数据。对于这种情况,您可以不时与服务器同步或将数据存储在 json 文件中。谢谢。
    • 查看官方的科尔多瓦文档 - cordova.apache.org/docs/en/latest/cordova/storage/storage.html。他们说 localStorage 将被清除,但没有任何关于 indexeddb 数据清除的信息。查看他们的劣势部分。
    • @Ujjwal Kumar Gupta 我可以肯定地确认,当设备空间不足时,iOS 会擦除 Cordova 应用程序的 Web 视图中的 localStorage、IndexedDB 和 WebSQL 数据。要对此进行测试非常简单:在包含部分此类数据的 iDevice 上安装 Cordova 应用程序,然后在设备中填充电影直到其充满。请注意,有时“正在清理..”会出现在主屏幕上您的应用程序名称的位置,当您重新打开应用程序时,您的所有数据都消失了。我之前就被这个抓住了,现在将所有重要数据存储在不受 iOS 异想天开清理的原生 SQLite DB 中
    猜你喜欢
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2013-05-14
    • 2018-10-01
    相关资源
    最近更新 更多