Предлагаю Вашему вниманию статью об одной небольшой, но удобной и полезной функции.
Не раз сталкивался с ситуацией, когда нужно понять, какая вкладка или какой кусок кода QlikView отрабатывает дольше всего. Таких «расхитителей времени» обычно ищут при оптимизации приложения, тестировании или при нестандартных ситуациях. В общем, применение каждый найдёт сам.
Техническое решение
Всматриваться в логи меня не вдохновляет, а вот добавить туда строки, по которым будет легче найти нужную информацию – хорошая идея. На одном из мероприятий qRUG Day Олегом Савельевым был предложен простой способ фиксирования времени работы скрипта на определенных этапах.
Я же этот способ немного оптимизировал: в итоге сделал две функции:
Сам код можно скачать в текстовом файле WorkTime.
Разберем код:
- Перед двумя функциями я определяю три переменные:
vReloadTimeTab – для учёта времени перезагрузки вкладок
vReloadTime – для учёта времени перезапуска отдельных блоков кода
n – счётчик для блоков кода внутри вкладки
- Внутри функций определяю переменные vSpredTab и vSpred, которые обозначают искомое время перезаписи. Определяются, как now()- значение переменной vReloadTimeTab или vReloadTime соответственно.
- Данные функции вызываю в скрипты с помощью include (чтобы при любой доработке функции изменения затрагивали сразу все приложения, где она используется):
$(Include=$(QVScriptPath)\worktime.txt);
Ставлю данную функцию в конце блока Main.
Далее в конце каждой вкладки проставляю:
CALL TraceTabTime;
При необходимости (в зависимости от приложения) вызываю функцию TraceTime:
CALL TraceTime;
Важно: Логи должны быть включены для возможности просмотра или обработки информации после завершения работы скрипта.
Пример
С помощью меню Insert – Test Script (или быстрое сочетание клавиш с последнего qRUG Day “Ctrl + Q + Q”) я сгенерил три вкладки скрипта (скачать сам .qvw с примером можно в конце статьи), завысив количество создаваемых строк, и добавил на каждую вкладку вызов функции TraceTabTime, а на третьей вкладке использовал функцию TraceTime между блоками скрипта.
После выполнения получил такую картину:
Сразу видно, что дольше всех отрабатывала вкладка 3, а внутри вкладки самым ресурсоёмким оказался 3 блок кода.
На больших приложениях анализ данных не столь очевиден, как в данном примере, но с этими функциями жить намного удобнее.
А дальше уже на любителя: текст можно сделать каким угодно, сделать счётчик на вкладки внутри данной функции, убрать или добавить пустые строки.
Возможно, кто-то по-другому решил данный вопрос – тогда поделитесь опытом в комментариях! Или есть желание что-то дополнить, буду только рад 🙂
Скачать:
Rob Wunderlich разработал набор очень полезных инструментов для практиков QlikView, среди них — Script Log Analyzer, который как раз занимается тем, что помогает проанализировать тайминг выполнения скрипта и увидеть на наглядной визуализации, какие операции наиболее время-емкие.
Прекрасное дополнение для его же QV Document Analyzer.