Поддерживает ли Meteor-JS автономное хранилище / кеш?

Поддерживает ли Meteor-JS автономное хранилище / кеш?

Из того, что я читаю: https://guide.meteor.com/collections.html:

Вместо этого на клиенте коллекция представляет собой кэш базы данных на стороне клиента. Это достигается благодаря библиотеке Minimongo - реализации MongoDB API в памяти, полностью на JS.

Часть в памяти, кажется, сводит на нет работу в автономном режиме. Я ошибся?

РЕДАКТИРОВАТЬ: Под «офлайн» я подразумеваю как можно больше этих качеств:

  • загружать приложение даже без подключения к Интернету, показывая данные пользователя
  • вносить изменения в автономном режиме, синхронизировать их позже, даже в автономном режиме, например, часы
  • при загрузке приложения в автономном режиме, еще не синхронизированные правки также должны отображаться

РЕДАКТИРОВАТЬ2: я думаю, правильным термином будет сначала автономный


person KarolDepka    schedule 27.08.2016    source источник


Ответы (2)


Вы правы в том, что вас беспокоит «в памяти» часть Minimongo. Но на автономном устройстве это не так плохо, как может выглядеть: до тех пор, пока приложение хранится в памяти (т. Е. Находится на вкладке, если открывается через браузер, или не закрывается принудительно, если открывается как приложение, упакованное в Cordova), ваш Minimongo живет и хранит ваши данные.

Однако, если вкладка браузера будет закрыта или приложение Cordova выйдет из памяти устройства (например, пользователь заставит его закрыть через переключатель задач / диспетчер приложений, или Android не хватит оперативной памяти и будет искать неиспользуемые приложения для закрытия. Это также означает, что просто возвращение на главный экран сохраняет ваше приложение в памяти), а затем ваш Minimongo (и его данные) исчезают.

Но есть пакеты, которые могут позаботиться и об этом варианте использования. См. Как приложения Meteor могут работать в автономном режиме?

person ghybs    schedule 28.08.2016

Эта функция не входит в стандартную комплектацию. Даже если вы внесете изменения в клиент, они будут отражены в клиенте, но как только соединение с сервером будет установлено, данные сервера переопределят изменения.

Вам придется вручную протолкнуть данные. Один из способов сделать это - использовать локальное хранилище браузера. Вы можете сохранить данные в локальном хранилище и отправить их на сервер после установления соединения, чтобы сделать изменения «постоянными».

Как указано в комментариях: Meteor будет пытаться продолжать вызывать метод до тех пор, пока соединение не будет восстановлено, используя Meteor.call, но после закрытия вкладки данные в клиенте будут потеряны. Итак, убедитесь, что данные сохранятся после закрытия вкладки, сохраните их в локальном хранилище.

person Ankit    schedule 27.08.2016
comment
Если изменения вносятся через Meteor.call, они действительно будут отражены в клиенте (оптимистичный пользовательский интерфейс), но на самом деле клиент также будет продолжайте попытки отправить вызов метода на сервер, пока он не будет успешным или приложение не будет закрыто (и не будет удалено из памяти на устройстве с Cordova). - person ghybs; 28.08.2016
comment
Он прекратит попытки, когда пользователь закроет вкладку, и данные, которые нужно ввести, будут потеряны. - person Ankit; 29.08.2016
comment
Похоже, что OP больше относится к гибридному приложению, к которому нет доступа через браузер. Гибридное приложение выходит из памяти устройства гораздо реже, чем вкладка браузера. - person ghybs; 29.08.2016
comment
Хорошо! Спасибо за указатель. Я прочитаю об этом подробнее. Спасибо! - person Ankit; 29.08.2016