как реализовать обновление виджетов в реальном времени?

Всем привет, у меня возник вопрос о том, как правильно реализовать обновление виджетов в "реальном времени". Как это работает сейчас: есть функции с манипуляциями виджетов ( создать, обновить,... получить и тд). С фронта мне приходят подобные модели

{
  "_id": {
    "$oid": "6613b0b7133b682c829b3f9b"
  },
  "title": {
    "value": "Давление",
    "brokerPath": null
  },
  "folderId": null,
  "icon": "http://local.bluetraktor.api:8000/api/icons/03.07 Индикаторы давления.svg",
  "data": {
    "value": {
      "value": "-0.0008793864399194717",
      "brokerPath": [
        "ASSETS_DB",
        "PV Value",
        "value"
      ]
    },
    "minValue": {
      "value": "0",
      "brokerPath": [
        "ASSETS_DB",
        "Нижний диапазон PV",
        "value"
      ]
    },
    "maxValue": {
      "value": "19.999998092651367",
      "brokerPath": [
        "ASSETS_DB",
        "Верхний диапазон PV",
        "value"
      ]
    },
    "colorRules": [],
    "valueAddition": {
      "value": "bar",
      "brokerPath": [
        "ASSETS_DB",
        "PV Units",
        "value"
      ]
    }
  },
  "type": "gauge",
  "position": {
    "i": "6613b0b7133b682c829b3f9b",
    "x": {
      "$numberLong": "0"
    },
    "y": {
      "$numberLong": "0"
    },
    "w": {
      "$numberLong": "1"
    },
    "h": {
      "$numberLong": "2"
    }
  }
}

_id - добавляет сама mongoDB в position.i тот же самый objId но уже в строке и это поле (position) нужно сугубо для позиционирования виджета на экране..

Поля возможные для заполнения пользователем выглядят так

{
    "value": "Давление",
    "brokerPath": null
}

где если brokerPath - не содержит пути для получения параметра - то значит, что value вписал сам пользователь и обновлять его не надо. В остальных случаях если

{
      "value": "0",
      "brokerPath": [
        "ASSETS_DB",
        "Нижний диапазон PV",
        "value"
      ]
    }

такого вида, то понятно откуда брать значение...

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

сейчас это работает очень медленно ( в среднем за счет скорости раста около 85,6...ms ). понимаю, что если будет много пользователей, это будет работать еще в разы хуже -> как правильно это реализовать?

виджет таблицы (12 значений по ссылкам) создается у меня от 1-2 секунд.. это как пример


Ответы (0 шт):