Постоянное и синхронное хранилище Cordova

Я разработал гибридное приложение с Cordova. Я использовал localStorage для сохранения некоторых данных на устройствах. Теперь мне нужен лучший и постоянный метод хранения. Также я ищу синхронную библиотеку. У тебя есть какой-нибудь совет?

Я просто нашел Persisto (https://github.com/mar10/persisto). Могу ли я использовать это с Cordova?


person Vatanay Özbeyli    schedule 09.12.2017    source источник


Ответы (2)


Я просто нахожу Персисто. Могу ли я использовать это с Cordova?

Вы можете использовать его с Cordova, но он выглядит просто оболочкой для localStorage, поэтому он не лучше/надежнее, чем прямое использование localStorage.

Если ваше приложение Cordova предназначено для iOS, вы должны знать, что любые локально сохраненные данные, хранящиеся внутри Webview (localStorage, WebSQL, IndexedDB), считаются данными кеша и, следовательно, могут быть удалены в любое время, если на устройстве заканчивается место для хранения.

Также я ищу синхронную библиотеку. У тебя есть какой-нибудь совет?

TL;DR: я не думаю, что вы найдете синхронный интерфейс для лучшего механизма хранения, потому что все более долговечные/надежные механизмы по своей сути асинхронны. В конечном счете, было бы лучше стиснуть зубы и переработать свой код для работы с асинхронным механизмом хранения.

Для надежного постоянного хранилища, которое не будет стерто iOS по прихоти, вы можете использовать собственную базу данных SQLite через cordova-sqlite-storage. Для простого интерфейса вы можете использовать обертку, такую ​​как localForage с cordovaSQLiteDriver.

Или, если ваш контент больше основан на файлах, вы можете сохранить его с помощью cordova-plugin-file в надежное место хранения.

person DaveAlden    schedule 10.12.2017
comment
Я действительно не понимаю, почему я должен переделывать свой JS на асинхронный для хранения 2 строк данных. LocalForage, NativeStorage, SecureStorage и т. д. Они все одинаковые. Существуют десятки асинхронных библиотек. Нет даже одной библиотеки синхронизации и сохранения. Это не ракетостроение. Я буду продолжать использовать localStorage, пока Cordova не закончит эту ерунду и не разработает синхронный метод. Спасибо, в любом случае. - person Vatanay Özbeyli; 11.12.2017
comment
Интерфейсы к базам данных и собственный JS-мост Cordova по своей сути асинхронны. Если бы было так просто разработать синхронный метод, это было бы уже сделано. Вы можете продолжать использовать локальное хранилище с оговоркой, что iOS может стереть его в любое время. - person DaveAlden; 11.12.2017
comment
Тем не менее, это не ракетостроение. Также не беспокойтесь о моих данных. Я собираюсь сделать их резервную копию на Firebase, когда устройство будет подключено к сети. - person Vatanay Özbeyli; 11.12.2017
comment
Still, it's not a rocket science. Вы правы: это информатика, а не проектирование и разработка космических аппаратов - может быть, вы спутали эти два понятия? I'm going to back-up them on Firebase when the device is online. Удачи с этим... - person DaveAlden; 11.12.2017

Теперь мне нужен лучший и постоянный метод хранения.

Вы можете использовать indexeddb для лучшего постоянного хранения. но все API асинхронны и очень сложны в реализации.

Я ищу синхронную библиотеку. У тебя есть какой-нибудь совет?

Вы можете использовать jsstore для синхронного выполнения кода БД. Он предоставляет sql как API, и все API являются синхронными. Поэтому вам не нужно беспокоиться о том, что вы не получите последние данные и т. д.

Итак, если вы вызываете обновление, выбираете API один за другим, то сначала будет выполнено обновление API, а затем выберите API.

Опять же, это не делает ваш код асинхронным, он просто выполняет код в том же порядке, в котором вы его вызываете.

Проверьте это здесь - http://jsstore.net/

если вы ищете библиотеку для хранения только значения пары ключей, вы можете использовать KeyStore. Здесь вам не нужно делать никаких настроек.

Проверьте хранилище ключей здесь - https://github.com/ujjwalguptaofficial/KeyStore

person Ujjwal Kumar Gupta    schedule 11.12.2017
comment
Спасибо за ваш ответ. Насколько я знаю, localStorage и Indexeddb очень похожи. Выдерживает ли JSstore обновление приложения IOS? - person Vatanay Özbeyli; 11.12.2017
comment
indexedb и localstorage совершенно разные. Ознакомьтесь с ними для получения дополнительной информации - инженерия программного обеспечения .stackexchange.com/questions/219953/, заголовок stackoverflow.com/questions/5924485/. JsStore — это оболочка indexedb, она просто упрощает использование indexedb. Таким образом, это зависит от разных ОС, сохраняют ли они данные indexeddb или нет при обновлении. Вы можете синхронизироваться с сервером или время от времени сохранять данные в файле json для таких ситуаций. Спасибо. - person Ujjwal Kumar Gupta; 11.12.2017
comment
Ознакомьтесь с официальной документацией по кордове — cordova.apache.org/docs/ ru/latest/cordova/storage/storage.html. Говорят, что localStorage будет уничтожен, но нет никакой информации об уничтожении данных indexeddb. См. раздел об их недостатках. - person Ujjwal Kumar Gupta; 11.12.2017
comment
@Ujjwal Kumar Gupta Я могу категорически подтвердить, что iOS стирает данные localStorage, IndexedDB и WebSQL в веб-просмотре приложения Cordova, когда на устройстве заканчивается свободное место. Проверить это очень просто: установите приложение Cordova на iDevice, которое содержит некоторые из этих данных, затем заполните устройство фильмами, пока оно не заполнится. Обратите внимание, что в какой-то момент вместо имени вашего приложения на главном экране появляется «Очистка..», и когда вы снова открываете приложение, все ваши данные исчезают. Я был пойман на этом раньше и теперь храню все важные данные в родной базе данных SQLite, которая не подлежит капризной очистке iOS. - person DaveAlden; 11.12.2017