Кэширование
Информация |
В следствие того, что для панелей индикаторов (дашбордов) и отчетов используется одинаковый унифицированный формат шаблона MRT, методы для загрузки шаблона и работы с данными, то в тексте документации будет использоваться слово «отчет».
|
Компонент HTML5 Viewer позволяет использовать кэш сервера для хранения построенного отчета. Если кэширование не используется, то при каждом запросе страницы необходимо загружать отчет, подключать данные и строить его заново. Если использовать кэширование, то при следующем обновлении страницы, ранее построенный отчет будет загружен из кэша.
При использовании кэширования стоит учитывать, что каждый сохраненный отчет в кэше занимает память сервера и при большом количестве запросов к ним это может стать критичным фактором. Поэтому необходимо выбирать из двух вариантов – или маленькие потребности к памяти, но большие к производительности, или небольшие потребности к производительности, но большие к памяти.
Управлять кэшированием можно при помощи следующих приведенных ниже свойств.
Свойство CacheMode
Данное свойство вьювера включает кэширование и устанавливает его тип. Может принимать одно из значений, указанных в перечислении StiServerCacheMode:
None – кэширование отключено, каждое действие вьювера требует загрузки отчета и, если это шаблон, последующее его построение; ObjectCache – для кэширования используется кэш сервера, в котором сохраняется объект отчета (значение по умолчанию); StringCache - для кэширования используется кэш сервера, в котором сохраняется отчет в виде упакованной строки; ObjectSession - для кэширования используется текущая сессия, в которой сохраняется объект отчета; StringSession - для кэширования используется текущая сессия, в которой сохраняется отчет в виде упакованной строки.
|
Свойство CacheItemPriority
Данное свойство устанавливает приоритет хранимого в кэше сервера отчета, влияет на автоматическую очистку памяти сервера в случае ее нехватки. Чем меньше приоритет, тем больше шанс удаления информации из памяти.
|
Свойство CacheTimeout
Данное свойство указывает величину времени в минутах, в течение которого необходимо сохранять отчет в кэше сервера. Если при использовании кэширования требуемый отчет не найден в кэше (т.е. истекло время хранения объекта), то он будет запрошен заново при помощи специального действия GetReport с последующим подключением данных отчета и его построением.
|
Компонент HTML5 Viewer предоставляет возможность определить собственные методы работы с кэшированием отчета. Для этого предназначен специальный класс StiCacheHelper, который содержит методы получения отчета из кэша и сохранения отчета в кэш. Необходимо создать новый класс, унаследованный от StiCacheHelper, и перегрузить указанные выше методы, которые соответственно имеют названия GetReport и SaveReport.
HomeController.cs |
... public class ViewerController : Controller { public class StiMyCacheHelper : StiCacheHelper { public override StiReport GetReport(string guid) { string path = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/"), "CacheFiles", guid); if (System.IO.File.Exists(path)) { StiReport report = new StiReport(); string packedReport = System.IO.File.ReadAllText(path); if (guid.EndsWith("template")) report.LoadPackedReportFromString(packedReport); else report.LoadPackedDocumentFromString(packedReport);
return report; } return null;
//return base.GetReport(guid); }
public override void SaveReport(StiReport report, string guid) { string packedReport = guid.EndsWith("template") ? report.SavePackedReportToString() : report.SavePackedDocumentToString(); string path = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/"), "CacheFiles", guid); System.IO.File.WriteAllText(path, packedReport);
//base.SaveReport(report, guid); } }
static ViewerController() { StiMvcViewer.CacheHelper = new StiMyCacheHelper(); } } ... |
Для инициализации работы с кэшированием отчета при помощи созданного класса, достаточно задать его в качестве значения статического свойства StiMvcViewer.CacheHelper в конструкторе контроллера.
Информация |
При отключенном кэшировании отчета (свойство вьювера CacheMode имеет значение None), указанный класс задействован не будет.
|