Явно прекратить подписку - PullRequest
       28

Явно прекратить подписку

0 голосов
/ 17 ноября 2018

В моем приложении Meteor есть публикация, которая может или не может публиковать большой набор документов.Как правило, издание публикует любое количество документов до нескольких сотен.Однако эти документы добавляются пользователем, и количество добавляемых пользователем ограничений не ограничено.Таким образом, теоретически (и в какой-то момент на практике) пользователи могут иметь несколько тысяч, десятки тысяч, если не сотни тысяч документов, которые будут опубликованы с использованием этой публикации.

Хотя я использую нумерацию страниц только для отображениянебольшое количество документов, публикация - это пользовательская публикация, которая объединяет данные нескольких коллекций и, таким образом, в запросе выполняются нумерация страниц, фильтрация и сортировка:

const subscription = Meteor.subscribe('myLargePublication');
const documents = MyLargePublication.find({ query }, { skip, limit, sort });

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

Из метеора документация по # подписке Я так понимаю, есть функция stop(), которую можно вызвать в обработчике подписки на

Отменить подписку.Обычно это приводит к тому, что сервер указывает клиенту удалить данные подписки из кэша клиента.

Следовательно, я надеялся, что использование чего-то подобного может решить проблему:

componentWillUnmount() {
    const { subscription } = this.props;
    subscription.stop()
}

Просмотр журналов с this.onStop(() => { ... }) в моей публикации не дает никаких полезных идей.Похоже, что эта функция вообще ничего не делает в этом сценарии, и я чувствую, что для решения моей проблемы я должен изменить свою публикацию / подписку.

Можно ли как-нибудь досрочно отменить подписку склиент

1 Ответ

0 голосов
/ 17 ноября 2018

Я полагаю, что у вас есть проблема с дизайном, ваш Meteor.subscribe('myLargePublication'); может принять еще одно дополнение, которое управляет поведением Meteor.publish, поэтому вы можете отправлять 10 документов за раз или возвращать набор документов на основе пользовательского поиска.

Само собой разумеется, публиковать сотни документов нецелесообразно, это повлияет на производительность как сервера, так и клиента, сказав, что, поскольку вы используете React, когда размонтируется компонент, подписка должна прекратиться.

Существуют некоторые библиотеки, которые вы можете проверить, которые могут помочь в вашей ситуации

Реактивная подписка (Не перезапускает подписку с самого начала, когда аргумент передан Meteor.publish)

Трекер - компонент (Останавливает подписку при отключении компонента)

...