Кэширование данных сервиса в мэшапе
Можно включить кэширование данных для сервисов, которые используются для загрузки данных в мэшап. Кэширование помогает уменьшить число сетевых запросов к серверу, что улучшает производительность и взаимодействие с пользователем. Например, кэширование сервиса, на загрузку которого требуется несколько секунд, может привести к сокращению нагрузки на сеть, особенно если сервис выполняется часто, а возвращаемые данные меняются редко. Если кэширование включено и настроено свойство CacheDuration, результат сервиса временно сохраняется в браузере до истечения заданного срока кэширования. Можно также привязать событие к параметру сервиса InvalidateCache, чтобы очищать кэшированные данные для сервиса вручную. Это обеспечивает программное управление жизненным циклом кэша. Например, если пользователь обновляет данные в определенном месте мэшапа, можно инициировать триггер InvalidateCache, чтобы принудительно выполнить следующий вызов для получения свежих данных.
Пример. Рассмотрим мэшап, который использует сервис для отображения данных о погоде в реальном времени. Кэширование можно включить, выбрав CacheReturnedData на панели Свойства данных. Задайте для параметра CacheDuration значение 60000 миллисекунд (1 минута) и выберите Наименование мэшапа в качестве CacheStrategy для совместного использования кэша экземплярами мэшапов. Если пользователи перезагружают мэшап в течение минуты, ThingWorx обслуживает кэшированный результат. По истечении срока действия сервис вызывается снова. Если мэшап принимает входные параметры, такие как выбранный город, можно настроить CacheKeyParameters для кэширования данных отдельно для каждого ввода. Если мэшап кэширует слишком много комбинаций или использует слишком много памяти.
Оптимальные методы кэширования данных мэшапа
Используйте кэширование выборочно и включайте его только для сервисов, возвращающих статические или медленно изменяющиеся данные.
Задайте разумные длительности кэша. Избегайте использования большого времени кэширования, за исключением случаев, когда данные обновляются редко.
Избегайте кэширования больших наборов данных. Вместо этого разбивайте результаты на страницы или ограничьте данные только необходимыми результатами.
Проверьте стратегии кэширования. Используйте инструмент отладчика кэширования во время разработки, чтобы проверить поведение кэширования.
Включение кэширования для сервисов в мэшапе
Чтобы включить кэширование для сервиса в мэшапе, выполните следующие шаги.
1. В Mashup Builder откройте панель Данные, а затем выберите сервис данных, который нужно кэшировать, чтобы просмотреть его свойства данных.
2. На панели Свойства данных в разделе Расширенные установите флажок рядом со свойством CacheReturnedData.
3. Укажите число миллисекунд хранения результата в свойстве CacheDuration.
4. Дополнительно можно указать стратегию хранилища кэша в свойстве CacheStrategy.
5. Чтобы кэшировать результаты для входных данных конкретных параметров, выберите параметр из выпадающего списка значений CacheKeyParameters.
6. Щелкните Сохранить, а затем щелкните Просмотр мэшапа.
Во время выполнения данные сервиса кэшируются при первом выполнении сервиса. Кэшируются все данные, возвращаемые на основе входных параметров, выбранных для сервиса с помощью свойства CacheKeyParameters. При повторном выполнении сервиса данные загружаются из сохраненного кэша до истечения установленного времени в CacheDuration.
Выбор стратегии кэширования
Свойство CacheStrategy можно использовать для сохранения кэшированных данных одним из двух способов:
Экземпляр мэшапа - кэш генерируется на основе уникального идентификатора текущего экземпляра мэшапа. Используйте эту стратегию, чтобы гарантировать, что каждый экземпляр мэшапа имеет отдельный кэш. Это полезно, когда каждый экземпляр мэшапа отображает различные данные, даже если сущность и сервис совпадают.
Наименование мэшапа - кэш генерируется на основе наименований мэшапа, сущности и сервиса. Используйте эту стратегию, если предполагается, что одни и те же данные должны отображаться в нескольких экземплярах мэшапа, например в виджете "Набор" или когда мэшап встроен в другие мэшапы. Эта стратегия менее специфична, чем кэширование экземпляров, и кэш является общим для всех экземпляров одного и того же мэшапа.
Свойства кэширования сервиса
В следующей таблице перечислены свойства кэширования, доступные для сервисов на панели Свойства данных.
Свойство
Описание
Базовый тип
Значение по умолчанию
Доступно для привязки?
CacheReturnedData
Включите его, чтобы кэшировать данные, возвращенные с сервера.
BOOLEAN
False
Нет
CacheDuration
Задает время жизни для кэшированных данных в миллисекундах. Если данные кэшируются, новые данные загружаются с сервера только по истечении срока действия.
INTEGER
Да
CacheStrategy
Управляет способом хранения кэша. Можно хранить кэшированные результаты на основе ключа Экземпляр мэшапа или Наименование мэшапа.
STRING
Экземпляр мэшапа
Нет
CacheKeyParameters
Открывает выпадающий список, позволяющий выбрать входные параметры, которые будут использоваться для создания ключа кэша. При выборе входного параметра сервиса результаты сервиса для этих входных данных кэшируются.
STRING
Нет
MaxResultSets
Управляет максимальным числом результатов, которые нужно сохранить для сервиса данных. Новый результат кэшируется при обновлении входных параметров. Самый старый результат удаляется при достижении максимального значения.
INTEGER
10
Да
InvalidateCache
Очищает кэшированный результат для сервиса. Доступно только при включенном кэшировании. Можно запустить этот сервис, чтобы обновлять кэшированные данные при смене сервера или вручную инициировать новую загрузку данных.
* 
Сервис InvalidateCache доступен, только если включен сервис CacheReturnedData.
Сервис
Да
Проверка производительности кэширования и устранение неполадок
Хотя кэширование повышает производительность сети, хранение слишком большого количества данных в памяти может снизить скорость реагирования мэшапа и вызвать проблемы с производительностью. Чтобы устранить эти проблемы, ThingWorx автоматически ограничивает объем памяти, который может использоваться для кэширования. Если приложение превысит максимальный размер кэша, система автоматически очищает старые записи кэша (начиная с самых старых) до тех пор, пока не станет достаточно свободного места для хранения нового набора результатов. Инструмент отладчика времени выполнения можно использовать для мониторинга кэшированных данных, используемых мэшапами, и управления ими. Чтобы открыть инструмент отладчика во время выполнения, нажмите кнопку Показать/скрыть информацию об отладке на панели инструментов мэшапа, если она видима, или нажмите CTRL+ALT+SHIFT+F9, чтобы отобразить панель инструментов времени выполнения.
* 
ThingWorx автоматически удаляет кэшированные элементы, когда сервис достигает максимального количества сохраненных результатов или когда суммарный размер кэша превышает предел. Если размер кэша превышает установленное предельное значение, ThingWorx сначала удаляет старые записи кэша, пока не будет освобождено достаточно места для хранения нового набора результатов. Эти ограничения помогают обеспечить оптимальную производительность и предотвратить чрезмерное использование памяти браузером.
На следующем рисунке показан отладчик во время выполнения. В верхней части вкладки Cache Data можно просмотреть сводку, показывающую общее количество кэшированных элементов, приблизительный общий размер кэша и максимально допустимый размер кэша. Эта сводная информация помогает быстро оценить, может ли кэширование влиять на производительность.
Отладчик отображает следующую информацию для каждого кэшированного сервиса:
Наименование мэшапа: мэшап, вызвавший сервис.
Имя сервиса: определенный сервис, кэшировавший данные.
Идентификатор кэша: внутренний идентификатор, используемый для группирования и идентификации кэшированных результатов.
Кэшированные записи результатов. Каждый элемент показывает следующее:
Стратегия кэширования для кэшированного элемента.
Размер кэшированного результата.
Время последнего доступа.
Входные параметры, которые используются при вызове сервиса, и их значение.
Кнопка "Удалить" для ручного удаления записи из кэша.
При удалении кэшированных элементов вручную или автоматически сводка обновляется. Каждый раздел можно также развернуть или свернуть. В данном примере первый сервис getCategories кэшируется для наименования мэшапа. Другие сервисы, такие как serviceDefsMock, кэшируются для Mashup Instance. Также перечисляются кэшированные входные параметры и их значения для этого сервиса.
Было ли это полезно?