Странности при загрузке страниц

InstantCMS 2.X
#16 19 апреля 2020 в 16:02

Гружу страницу top-mods.ru/mods

vikont

Эта страница (и страница категорий) меня не интересует. На них TTFB 200-300мс

А вот на странице записей этого типа контента TTFB 1500-3000мс (сейчас опустился до 900-1300мс за счет включения кеширования данных некоторых полей).

Мало? Включите Отладку и смотрите ее данные


В первом сообщении есть информация, что данные в отладке все в зеленой зоне (самый долгий запрос к бд или вывод виджета менее сотых секунды).
#17 20 апреля 2020 в 09:17
@Kerncraft1, прописав ваш код в шаблоне вы таким образом замеряете время обработки самого шаблона. Основная часть работы выполняется системой до этого и уже готовая информация "вываливается" в шаблон. Вам нужно проводить данный эксперимент в файле system/controllers/content/actions/item_view.php, поместив ваши фрагменты между
  1. public function run(){
и
  1. return $this->cms_template->render('item_view', array(
и постепенно перемещая все ближе и ближе друг к другу до тех пор, пока вы не обнаружите участок кода, съедающий основную часть времени. По содержимому этой части можно будет судить кто виноват и что с этим делать.
#18 20 апреля 2020 в 09:33
dwd, Вот прямо огромное спасибо за совет! Сейчас буду тестировать!
#19 20 апреля 2020 в 10:01

По содержимому этой части можно будет судить кто виноват и что с этим делать.

dwd

Еще раз спасибо за подсказку!

Нашел участок кода, который выполняется долго:

  1.  
  2. $start = hrtime(true);
  3.  
  4. // Парсим значения полей
  5. foreach($fields as $name=>$field){
  6. $fields[ $name ]['html'] = $field['handler']->setItem($item)->parse( $item[$name] );
  7. $fields[ $name ]['string_value'] = $field['handler']->getStringValue( $item[$name] );
  8. }
  9.  
  10. $finish = hrtime(true);
  11. $delta = $finish - $start;
  12. echo $delta . ' нс.';
  13.  
Данный участок кода выполняется приблизительно за 1 секунду (т.е. именно он ответственен за ttfb в 1000+ мс).

Другой вопрос, что тут можно сделать?
#20 20 апреля 2020 в 10:18
Этот код отвечает за обработку полей. Вам необходимо определить какие типы полей съедают большую часть времени и в дальнейшем смотреть как оптимизировать эти поля. После строки
  1. foreach($fields as $name=>$field){
вставьте
  1. if($field['type'] != 'list') continue;
так вы узнаете время обработки всех поле типа list
потом смените в этой строке тип на другой, например
  1. if($field['type'] != 'seostring') continue;
так вы увидите какой тип полей съедает больше ресурсов
#21 20 апреля 2020 в 10:27

так вы увидите какой тип полей съедает больше ресурсов

dwd

С вариантом
  1. $field['type'] != 'seostring') continue;
самое большое время выполнения. В принципе логично, потому как полей данного типа у меня больше всего.
#22 20 апреля 2020 в 11:27
@Kerncraft1, проверяйте настройки полей. При включенном кэшировании процесс обработки поля сводится к простому выводу результата, хранимого в БД, это не должно вызывать ни нагрузки на сервер ни временных лагов.
  1. if($this->getOption('seotext_cache') && $value != 1 && $value != '') return $value;
Даже сотня полей не будет вызывать хоть сколько-либо значимую задержку. Если же кэш отключен, то скорость естественно будет зависеть от количества полей и сложности паттернов.
#23 20 апреля 2020 в 11:41

проверяйте настройки полей

dwd

Еще раз проверил все поля.

Вчера обнаружил, что в некоторых полях (около 10) кеш был отключен. Включил: время выполнения значительно снизилось (с 3 секунд до 1 секунды).

Может необходимо все записи пересохранить? Правда руками это сделать не реально будет.

Скину вам данные в ЛС — с меня благодарность финансовая. Вы всегда решали любую проблему, с которой я к вам обращался)
#24 20 апреля 2020 в 13:02
В очередной раз удивляюсь талантам DWD. За 10 минут моя проблема была решена. TTFB страниц записей данного типа контента стал 100-200 мс (каким ему и положено быть).

Вывод: можно иметь хоть тысячу полей в типе контента и все будет работать быстро и правильно. А если сталкиваетесь с проблемами — просто пишите DWD в личку!

Всем спасибо!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.