2016-10-11 3 views
1

Вот моя проблема.Делает ли перекрытие подписки в Meteor хуже?

У меня есть приложение, где пользователи могут хранить заметки в блокнотах.

В настоящее время, когда пользователь нажимает на блокнот, я подписываюсь на публикацию, которая возвращает эти блокноты в первые 5 заметок.

Таким образом, всякий раз, когда пользователь переходит к новому блокноту, устанавливается новая подписка, а 5 нот этого блокнота заканчиваются в minimongo. Таким образом, minimongo имеет только 5 заметок в коллекции заметок за один раз

Чтобы улучшить пользовательский интерфейс, я изменил публикацию, так что при первоначальной загрузке всего приложения я подписался на публикацию, в которой будут представлены все блокноты и первые 5 заметок для каждого блокнота. Итак, теперь в minimongo мы имеем (5 x (# блокнот)) количество нот в любое время.

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

Поэтому при загрузке я подписываюсь на myInfo, который возвращает пользователям блокноты и кулаки по 5 заметок для каждого блокнота.

Затем, когда вы на самом деле нажимаете блокнот, я подписываюсь на myNotepadInfo, который также возвращает первые 5 нот в блокноте. Поскольку первоначальная подписка уже извлекла эту информацию, ни один из документов в minimongo не изменился. Но я все еще хочу подписаться на myNotepadInfo, потому что у меня есть механизм загрузки большего количества, который зависит от этой подписки в шаблоне.

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

Итак, у меня есть вторая подписка, которая перекрывает начальную подписку.

Мне кажется, что, поскольку вторая подписка перекрывается с первоначальной, она должна передавать меньше документов клиенту, чтобы она была быстрее?

+0

Из [meteor documentation] (https://docs.meteor.com/api/pubsub.html#Meteor-subscribe): '* Однако, если следующая итерация вашей функции запуска подписывается на тот же набор записей (тот же самый имя и параметры), «Метеор» достаточно умен, чтобы пропускать расточительную отписку/переадресацию. * « Я не думаю, что это хорошая практика, чтобы подписаться на все при запуске. Время загрузки сильно увеличится с большим количеством блокнота. Вот почему для подписки. Если в будущем вы хотите реализовать динамическую загрузку/поиск, [easy: search] (https://github.com/matteodem/meteor-easy-search) - хороший выбор. –

ответ

0

Два ключевых вопроса для этого: (1) сколько данных вы отправляете клиенту ?; и (2) сколько пользователей вы ожидаете?

Второй пункт требует некоторого объяснения. Ключевым компонентом существующей в настоящее время (2016) пассивной архитектурой «Метеор» является то, что подписки клиентов регистрируются и отслеживаются на сервере. Каждая дополнительная подписка, которая не может быть повторно использована (т. Е. Не дублирует другую подписку), увеличит требования к процессору для приложения. Здесь звучит так, будто каждый пользователь «владеет» блокнотом (хотя это может и не быть). Если это так, это будет означать низкое повторное использование подписки - каждому пользователю потребуется отдельная подписка для получения своего блокнота, поскольку они не могут использоваться повторно пользователями. Следовательно, две подписки на блокнот для каждого пользователя будут эффективно удваивать долю загрузки процессора в приложении, что связано с подпиской на блокнот.

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

Хорошая статья от Kadira при повторном использовании наблюдателя is here, а также я рекомендую их (оплачиваемые) изделия с пуленепробиваемыми метеорными изделиями.

Наконец, вы можете ознакомиться с некоторыми инструментами Kadira, предназначенными для улучшения этих проблем, Subs Manager и Fast Render. Вы должны проверить, продолжают ли они поддерживаться, хотя - нет.

+0

Привет, Джереми, спасибо, это полезно. Пользователь подписывается на свою собственную информацию. В публикации я возвращаю блокнот и заметки с помощью 'this.userId' в запросе. Как еще я это сделаю? Я не понимаю, похоже, что это единственный способ подписаться на ваши собственные данные. Невозможно настроить его так, чтобы пользователи делились подпиской. Я что-то пропустил? – nearpoint

+0

Я не думаю, что вам что-то не хватает. Если вы делаете что-то вроде 'return Notepads.find ({userId: this.userId})' в своей публикации, вы не сможете повторно использовать наблюдателей, чтобы вам было лучше с первой из двух стратегий, изложенных в вопрос. Две подписки на блокнот на одного пользователя приведут к проблемам с ЦП раньше, что является основным узким местом для измерения Метеора. (Единственное, что немного повысит эффективность, - это сделать нулевую проверку для this.userId, на которую ссылается статья Kadira, связанная выше, и это не касается основной проблемы.) –

 Смежные вопросы

  • Нет связанных вопросов^_^