Лучший способ кэшировать данные на стороне клиента по маршрутам железного маршрутизатора в Meteor

Я создаю приложение Cordova, которое представляет операции CRUD со списком билетов. На домашней странице представлен список, и вы можете щелкнуть любой элемент списка, чтобы получить более подробную информацию о конкретном билете.

Главная страница доступна по адресу / и представляет собой шаблон tickets. Страница заявки доступна по адресу /ticket/:_id и представляет собой шаблон ticket.

Маршрут / подписывается на все билеты, относящиеся к текущему пользователю (скоро будет добавлена ​​нумерация страниц). Я предполагаю, что эти данные кэшируются на стороне клиента в minimongo.

Когда пользователь нажимает, чтобы узнать больше о билете, я попытался получить новые данные через Tickets.findOne(Router.current().params._id). Это работает, если я добавлю подписку на один билет на этот маршрут. Не работает, если я избавлюсь от подписки.

Это не имеет большого смысла, потому что первоначальная подписка на билеты должна кэшировать все видимые билеты на стороне клиента в minimongo. При выполнении Tickets.findOne(Router.current().params._id) -- разве Meteor не должен обращаться к minimongo за этими данными без необходимости новой подписки?

Я использую GroundDB для заземления коллекций и методов, даже если приложение находится в автономном режиме. Он работает, но не учитывает подписки по маршрутам.

Любые предложения о том, как лучше всего кэшировать данные по маршрутам, чтобы сделать приложение быстрым и уменьшить количество поездок в БД?


person Gaurav    schedule 05.10.2015    source источник


Ответы (1)


Похоже, вам нужно использовать subs-manager.

Почему?

Когда вы подписываетесь внутри вычисления Tracker.autorun, все подписки, запущенные в предыдущем вычислении, будут остановлены.

Iron Router запускает все подписки внутри вычисления Tracker.autorun, так что это повлияет и на Iron Router: когда вы переходите на новый маршрут, все предыдущие подписки будут остановлены. Пользователю придется немного подождать, даже если он ранее посещал этот маршрут. Это проблема UX.

Кроме того, это заставит сервер Meteor повторно отправить данные, которые у вас уже были в клиенте. Это будет тратить процессор вашего сервера и пропускную способность сети.

Решение

Менеджер подписок кэширует ваши подписки и запускает все подписки, которые были кэшированы при изменении маршрута. Это означает, что при переключении между маршрутами пользователю больше не придется ждать. Кроме того, Meteor не нужно повторно отправлять данные, которые уже находятся в клиенте.

С технической точки зрения, Subscriptions Manager выполняет собственные внутренние вычисления Tracker.autorun. Он не мешает работе Iron Router и работает независимо.

Менеджер подписок не кэширует ваши индивидуальные данные. Он говорит Meteor кэшировать всю подписку. Таким образом, ваши данные будут обновляться в фоновом режиме, как обычно.

person JeremyK    schedule 06.10.2015