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

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

Домашняя страница достигнута в / и представляет tickets шаблон. Страница билета достигнута в /ticket/:_id и представляет ticket шаблон.

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

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

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

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

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

1 ответ

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

Зачем?

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

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

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

Решение

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

В техническом плане Диспетчер подписок самостоятельно выполняет собственные вычисления в Tracker.autorun. Он не мешает работе Iron Router и работает самостоятельно.

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

Другие вопросы по тегам