Синхронизация нескольких индикаторов выполнения на стороне клиента с использованием Meteor без проблем с производительностью
Чего я пытаюсь достичь? На стороне клиента у меня есть различные div, которые отображают индикатор выполнения. Каждый из этих индикаторов показывает свой статус / уровень. Все они обновляются динамически. Мне нужно, чтобы они продолжали динамически обновляться без каких-либо проблем с производительностью.
О каких проблемах с производительностью вы говорите? На моем сервере работает какая-то логика, которая может проверять состояние каждого индикатора выполнения на стороне клиента. В настоящее время у меня есть setInterval, установленный на одну десятую секунды, чтобы продолжать обновлять уровень состояния индикаторов выполнения. Сначала я сделал это, сохранив данные непосредственно в коллекции mongo, которую затем использовал на стороне клиента для обновления шаблонов, возвращая статус через помощников шаблонов. Это нормально и сработало (по большей части). Однако, когда я добавил модальное окно (также реактивное модальное поле), которое открывало поверх уже работающего шаблона основного тела с динамическими процессами, оно начинало резко замедляться. В модальном окне также будет отображаться конкретный индикатор выполнения для div, на который нажал пользователь.
Короче говоря, влияние на производительность было драматичным, и оно будет ползти. Я подумал, что это связано с тем, что серверу нужно было выполнять так много обновлений индикатора выполнения, сохраняя его в базе данных mongo. Это было слишком много.
Что я пытался решить это? Я решил попытаться полностью обойти стойкость базы данных Монго, чтобы сохранить статус / уровни каждого из индикаторов выполнения. Это было достигнуто путем реализации имени пакета rocketchat:streamer
Этот пакет обеспечивает "двухстороннюю связь через DDP". Сделав это, я смог сохранить уровни индикатора выполнения в локальном кэшированном массиве на сервере, а затем с помощью rocketchat:streamer передавал данные через DDP непосредственно клиенту. Это фактически привело к увеличению производительности.
Итак, в чем ваша проблема сейчас и почему вы отправляете этот вопрос?
Несмотря на это, в обеих стратегиях я все еще испытываю проблемы с производительностью, и иногда синхронизация с разных подключенных устройств, подключенных к моему серверу разработки, не получает точных статусов синхронизации с индикатором выполнения. Мне нужны все индикаторы выполнения, чтобы всегда отображать одинаковый точный статус для всех подключенных пользователей в браузере. Мне нужна возможность показывать, например, 9 различных уникальных индикаторов выполнения на шаблоне, а также когда пользователь нажимает на один из уникальных элементов div, который содержит индикатор выполнения, чтобы показать еще один индикатор выполнения в модальном режиме.
Ребята, как лучше всего с Meteor выполнить синхронизацию нескольких различных индикаторов выполнения на стороне клиента, получая данные из логики, выполняемой на сервере?
Я ищу простой и легкий способ реализовать это. Я знаю, что для этого варианта использования должен быть простой способ иметь производительность и синхронизацию с Meteor.
Любая помощь будет принята с благодарностью.
Спасибо всем в сообществе, кто предлагает присоединиться.
1 ответ
Это было решено путем исключения всех старых данных с истекшим сроком хранения, сохраняемых через Meteor.publish....
Мораль этой истории - убедитесь, что вы не публикуете для своего клиента лишние данные, которые вам не нужны. Отфильтровав результаты, используя, например, находку с ценой $ девяносто и не включая конкретные типы данных, вы увидите значительное увеличение производительности в своем приложении Meteor. Это также может быть рассмотрено более подробно с другими примерами здесь: