Иногда бывает необходимо оценить время выполнения функций в ваших сценариях, когда вы замечаете, что виджет или процесс отрабатывают с задержками. Ниже описаны способы логирования для Клиентских и Серверных сценариев.
Клиентские сценарии.
В Клиентских сценариях у нас есть доступ к браузерным API, поэтому мы воспользуемся тремя встроенными методами:
- console.time()
- console.timeEnd()
- console.timeLog()
(https://developer.mozilla.org/ru/docs/Web/API/Console/time)
Декларируйте в самом начале Клиентского сценария:
declare const console:any;
Перед вызовом функции, время которой вы хотите залогировать, вызываем метод console.time(‘<label>’), где label - название таймера (вы можете использовать название функции). После вызова функции - методы console.timeEnd(‘<label>’) и сonsole.timeLog(‘<label>’).
![[IMG]](https://lh6.googleusercontent.com/97y9Kt0BCpIs_NxOuEU0z7DBYyhoORzLWrxf4xfhjNCb92E_03rV2FhsnkvIJaHjPI0NZU5WgSneWMWWBzuvXbYE9AimdfIcidLdlm5Cqt7sZdO1Q93AwqRbCGRYQ-Olr3NiGrQkGEskDKFqPQfYkg8)
В консоли вы увидите следующее:
![[IMG]](https://lh5.googleusercontent.com/KfYK-SZnWBVI6pp12_gx4CsvEyqjONpJR7tRKIt9rXcmRW3LZXRTM0nEuAcp72WsgzvJ7r52JMMi4Jy8Iw5PAxM2IhfKdBa9jznzJljhV2WPRps8YpXxzPRcyiZEbiNh-ZUIl3Wr7liPRIiH79wHWm4)
Серверные сценарии.
Приведу способ, с помощью которого вы сможете залогировать время выполнения функций как в ваших Клиентских сценариях, так и в Серверных.
Для начала вам необходимо создать в контексте 3 переменных:
Далее объявите в сценариях следующие методы:
Код:
function setLoggerInitialZero(){
Context.data.time_log = ''
Context.data.initial_logging_time = (new Date()).getTime();
}
Метод устанавливает общую начальную точку отсчета
Код:
function setLoggerIterationZero(){
Context.data.intermediate_logging_time = (new Date()).getTime();
}
Метод устанавливает промежуточную точку отсчета.
Код:
function writeDurationToLog(funcName:string){
const timeNow = (new Date()).getTime()
const funcTime = (timeNow - Context.data.intermediate_logging_time!)/1000;
const commonTime = (timeNow - Context.data.initial_logging_time!)/1000;
Context.data.time_log += `${funcName} - функция длилась ${funcTime}c, с момента запуска ${commonTime}c; \n`
}
Метод записывает в Context.data.time_log результаты логирования функции. На вход принимает строку с именем функции, для вычислений использует точки отсчета.
Перед вызовом функции, время выполнения которой вы хотите залогировать, вам необходимо произвести вызов метода setLoggerInitialZero (вызывается только один раз в начале) и setLoggerIterationZero (вызывается перед каждой функцией), а сразу после вызова функции - метод writeDurationToLog(‘funcName’), где funcName - название функции.
Данный методы можно вызывать столько раз, сколько вам потребуется, однако, необходимо учитывать что вызовы setLoggerIterationZero() и writeDurationToLog() необходимо делать последовательно, друг за другом. Залогировать время выполнения функции, внутри которой вы также вызываете описанные выше методы не получиться.
Далее вы можете использовать Context.data.time_log для вывода в консоль либо для просмотра в Мониторе процессов.
Разберем несколько примеров.
Вам необходимо выяснить, сколько времени выполнялся серверный сценарий - поступаем так:
![[IMG]](https://lh6.googleusercontent.com/ansCydIJgvPHDJWF8q4xFLkUAU1KufBzn0XCIhcKUYVt-ebJKgyQQrrHcX3n5hvbIvXPh2gG3Wuv2XVrNE32H7TGXgiyWz2niysxMdSIet_CznHmpV78BIG1Dqfz4xGrqhOcCNiPPMECcgJtiIP2ujw)
Вам необходимо “залезть” внутрь Серверного скрипта и разобрать его по полочкам - объявляем все 3 метода также и в Серверном сценарии, в Клиентском сценарии оставляет такой код:
![[IMG]](https://lh4.googleusercontent.com/H-c3RVQwgY_PGMzBFp1Y8UyuqBjnoJ0gu9rZlcLnTbwZCIybUWqTTXXCojPFR7-jS2Pq7qpe7i0LPpeYVqLwmYAyqN7yiNpUgulU80J9T4UQZg_ABZdZ6rkTVT11AvbmsC-6BKlZQ1zlu3jj46jK6Tk)
В Серверном сценарии оборачиваем каждый метод в setLoggerIterationZero()/ writeDurationToLog():
![[IMG]](https://lh6.googleusercontent.com/nqOgbe3vbl1JfW4E1s3B3cx9XetAFo8Iwqw6QGx9nz3du2L-HOwKoFzM9xUQN5_BROiy8SVQWKIIKvzP9MVR0BHAKM8PixFRodFbrY0qhwWEEkUII-y4wq82c1OVtNCpGN3Oe0N5776Iy9_b79Akgac)
В консоли вы сможете увидеть что-то подобное: