Это может не полностью ответить на ваш вопрос, однако, потратив бесчисленное количество часов на настройку производительности большого метеорного приложения, я решил поделиться некоторыми вещами, которые я узнал.
В Meteor, когда вы определяете публикацию, вы настраиваете реактивный запрос, который продолжает отправлять данные подписанным клиентам, когда изменения в базовых данных монго приводят к изменению результата запроса. Другими словами, он устанавливает запрос, который будет постоянно передавать данные клиентам по мере их вставки, обновления или удаления. Механизм, с помощью которого он это делает, заключается в создании observer
в запросе.
Когда observer
инициализируется (например, когда публикация подписана), он запрашивает mongodb для отправки исходного набора данных, а затем использует oplog для обнаружения изменений в будущем. К счастью, метеор может повторно использовать существующий наблюдатель для новой подписки, если запрос относится к той же коллекции, тем же селекторам и тем же параметрам.
Это означает, что вы можете создать сотни подписок на множество разных публикаций, но если они попадают в одну и ту же коллекцию и используют одни и те же селекторы запросов, то фактически у вас есть только 1 observe
в игре. Для получения более подробной информации я настоятельно рекомендую прочитать эту статью. с kadira.io (откуда я получил информацию, которую использовал в этом ответе).
В дополнение к этому Meteor также может работать с несколькими публикациями, публикующими один и тот же документ, и когда это происходит, документы будут объединены в один. См. это для более подробной информации.
Наконец, благодаря компоненту Meteor MergeBox, он сведет к минимуму объем данных, отправляемых по сети через все ваши подписки, отслеживая, какие данные изменились, а какие уже есть на клиенте.
Следовательно, в вашем конкретном примере похоже, что вы будете запускать несколько разных подписок по одному и тому же запросу (поскольку вы просто пытаетесь денормализовать свои данные) и набору данных. Из-за всех оптимизаций, которые я описал выше, я полагаю, что вы не будете страдать от проблем с производительностью, если примете этот подход.
Я делал подобные вещи в одном из своих приложений, и у меня никогда не было проблем.
person
jordanwillis
schedule
20.03.2017