Страница 1 из 1

Расчет дат , сильно грузит страницу при отображении

Добавлено: 25 окт 2021, 11:37
De_mon
Доброго дня. Столкнулся с проблемой очень долгой загрузки списка записей в одной из сущностей. Имеется поле которое рассчитывает кол-во прошедших рабочих дней от даты заключения договора по сегодня , если вывести это поле в список - загрузка страницы занимает 180 секунд+-, при этом не важно какое кол-во строк указано в отображении, что 1 что все 516 имеющихся. Как только убираю из отображения это поле страница загружается за 0,1 сек . Так же было отмечено что данная проблема возникла при кол-ве записей более 500 , при 500 записях загрузка страницы занимает 0,4сек, кто то сталкивался с подобной проблемой ? ИЛи все же придется методом тыка , отключать в расчетах сначало использование праздничных дней , функции и проч

Re: Расчет дат , сильно грузит страницу при отображении

Добавлено: 26 окт 2021, 08:15
support
Если включить опцию исключать праздничные дни, то функция будет перебирать каждую дату и сравнивать является ли она праздничной. И если расчет ведется динамически, то эта процедура будет выполнятся для каждой записи и из за этого появляется задержка.

Re: Расчет дат , сильно грузит страницу при отображении

Добавлено: 26 окт 2021, 12:05
De_mon
Понято, спасибо, без динамики тут не обойтись, буду смотреть как оптимизировать

Re: Расчет дат , сильно грузит страницу при отображении

Добавлено: 26 окт 2021, 12:33
support
Смотрите процедуру rukovoditel_days_diff
Сообщите, если получится оптимизировать.

Re: Расчет дат , сильно грузит страницу при отображении

Добавлено: 26 окт 2021, 16:21
De_mon
Спасибо, обязательно

Re: Расчет дат , сильно грузит страницу при отображении

Добавлено: 26 окт 2021, 18:54
De_mon
Увидел что в 3 будет db_slow_query_log , я думаю с ним будет проще понять

Re: Расчет дат , сильно грузит страницу при отображении

Добавлено: 26 окт 2021, 19:00
support
Ну это вам не поможет:)) Ну увидите вы запрос с функцией rukovoditel_days_diff, который тормозит, и что?
Дело в коде самой функции. Тут нужно придумать, как рассчитать разницу и исключить конкретные даты.
У меня это все в цикле

Код: Выделить всё

 WHILE FROM_UNIXTIME(start_date,'%Y-%m-%d')<=FROM_UNIXTIME(end_date,'%Y-%m-%d')  DO 
      	SET inc_days=1;
      	
        #exclude day of week
      	IF find_in_set(DAYOFWEEK(FROM_UNIXTIME(start_date,'%Y-%m-%d')),exclude_days) THEN
      		SET inc_days=0;  
      	END IF; 
где каждая дата перебирается. Собственно этот цикл и тормозить работу mysql.

Как сделать по другому я не знаю.

Re: Расчет дат , сильно грузит страницу при отображении

Добавлено: 26 окт 2021, 19:06
Develop-Soft
Я как-то похожую задачу реализовывал без цикла. Просто "Количество дней всего" минус "Количество праздничных и выходных"... Данные по рабочим/выходным дням импортировал из "открытых" на каком-то gov-сайте.