Sitemap генерируется 414 секунд.

Добрый день, на сайте 12836 страниц. Sitemap.xml генерируется 414 секунд.
Что можно сделать с этим, как ускорить. Яндекс и Google не могут загрузить файл.
Вот такой вывод showLog:
0.0001330: pdoTools loaded
0.0000470: Conditions prepared
0.0000079: Query parameters ready
0.0001872: No cached data for key «default/sitemap/a1d340»
0.0000310: xPDO query object created
0.0002091: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `editedon`, `createdon`, `context_key`, `class_key`, `uri`, `content`
0.0000420: Processed additional conditions
0.0006759: Added where condition: modResource.hidemenu=0, OR:modResource.class_key:IN(Ticket,Article), modResource.published=1, modResource.deleted=0, modResource.searchable=1, modResource.context_key=web
0.0001619: Sorted by modResource.menuindex, asc
0.0009911: SQL prepared «SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`editedon`, `modResource`.`createdon`, `modResource`.`context_key`, `modResource`.`class_key`, `modResource`.`uri`, `modResource`.`content` FROM `ryrc_site_content` AS `modResource` WHERE ( ( `modResource`.`hidemenu` = 0 OR `modResource`.`class_key` IN ('Ticket','Article') ) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 AND `modResource`.`searchable` = 1 AND `modResource`.`context_key` = 'web' ) ORDER BY modResource.menuindex asc „
0.2346210: SQL executed
0.0003691: Total rows: 12836
0.0233071: Rows fetched
0.0608480: Returning raw data
0.0150259: Created inline “modChunk» with name «d980adc1aeb51ab5c91d4c4741c276a4»
414.0271800: Rows processed
0.6068261: Saved data to cache «default/sitemap/a1d340»
0.0254791: Created inline «modChunk» with name «be75dd4b9525127c59b774f94767849c»
0.6575530: Rows wrapped
415.6537869: Total time
82 051 072: Memory usage
Сергей
05 февраля 2017, 15:38
modx.pro
1 237
0

Комментарии: 12

Андрей Коробков
05 февраля 2017, 19:35
+1
Вариант с жестким кешированием на день/несколько дней не подойдет?
Генерируете по крону в файл, на странице sitemap.xml сниппет с примерным содержанием:
<?php
return file_get_contents('pach_to_file');
    Максим Кузнецов
    05 февраля 2017, 19:45
    +2
    Вы можете реализовать сборный sitemap.
      Андрей Коробков
      05 февраля 2017, 19:54
      0
      Еще можете попробовать переписать tpl и tplWrapper на fenom, должно прилично ускорить.
        Воеводский Михаил
        05 февраля 2017, 20:56
        0
        Неестественное для pdoSitemap со стандартными чанками время. Если используются нестандартные чанки, приведите их содержимое.
          Іван Клімчук
          06 февраля 2017, 00:31
          0
          7 минут многовато конечно, но и 12 тыс ресурсов — дело такое. Учитывая, что проверяются даты и вычисляются коэффициенты важности ресурсов.
            Воеводский Михаил
            06 февраля 2017, 03:58
            0
            Не вижу присоединения TV для проверки важности. Соответственно, остается только проверка дат. Поскольку работа не на объектах, то 12К — не так уж много.
          Василий Наумкин
          06 февраля 2017, 08:28
          3
          +3
          Нужно использовать волшебный параметр
          &scheme=`uri`
          тогда для адресов страниц будет использоваться их uri, без запуска функции modX::makeUrl().

          Вот лог modx.pro:
          0.0000691: pdoTools loaded
          0.0000439: Conditions prepared
          0.0000050: Query parameters ready
          0.0000920: No cached data for key «default/sitemap/13f0b2»
          0.0000150: xPDO query object created
          0.0000861: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `editedon`, `createdon`, `context_key`, `class_key`, `uri`, `content`
          0.0000200: Processed additional conditions
          0.0002549: Added where condition: modResource.hidemenu=0, OR:modResource.class_key:IN(Ticket,Article), modResource.published=1, modResource.deleted=0, modResource.searchable=1, modResource.context_key=web
          0.0000701: Sorted by modResource.menuindex, asc
          0.0002680: SQL prepared «SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`editedon`, `modResource`.`createdon`, `modResource`.`context_key`, `modResource`.`class_key`, `modResource`.`uri`, `modResource`.`content` FROM `b2QHetSLC6ET_site_content` AS `modResource` WHERE ( ( `modResource`.`hidemenu` = 0 OR `modResource`.`class_key` IN ('Ticket','Article') ) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 AND `modResource`.`searchable` = 1 AND `modResource`.`context_key` = 'web' ) ORDER BY modResource.menuindex asc „
          0.1018419: SQL executed
          0.0021629: Total rows: 9786
          0.0283070: Rows fetched
          0.0230331: Returning raw data
          0.0005159: Created inline “modChunk» with name «93a97ed9d66e351bc63bf3ddfa38f405»
          0.0122530: Compiled Fenom chunk with name «modchunk/93a97ed9d66e351bc63bf3ddfa38f405»
          0.1083400: Rows processed
          0.0142739: Saved data to cache «default/sitemap/13f0b2»
          0.0096161: Created inline «modChunk» with name «be75dd4b9525127c59b774f94767849c»
          0.0241339: Rows wrapped
          0.3255181: Total time
          82 395 136: Memory usage

          Вот такой вызов:
          [[!pdoSitemap?
          	&scheme=`uri`
          	&tpl=`@INLINE
          	<url>
          		<loc>{$_modx->config.site_url}{$url}</loc>
          		<lastmod>{$date}</lastmod>
          		<changefreq>{$update}</changefreq>
          		<priority>{$priority}</priority>
          	</url>`
          ]]
            Толик
            07 февраля 2017, 10:38
            0
            При использовании &scheme=`uri` для главной страницы генерируется ссылка вида (из псевдонима): site.ru/glavnaya. Без &scheme=`uri` — все нормально — site.ru/
            Как исправить это при использовании &scheme=`uri`?
              Толик
              07 февраля 2017, 14:11
              +1
              Мое решение по правильному выводу главной страницы в sitemap:
              <loc>{$_modx->config.site_url}{$id == '1' ? '' : $url}</loc>
                Максим Кузнецов
                07 февраля 2017, 15:11
                0
                Главная страница -> настройки -> заморозить url (включить и выставить что-нибудь в духе index.php)

                (для выборки больших объемов страниц любых лишних операций лучше избегать)
                  Толик
                  07 февраля 2017, 17:35
                  0
                  Это я попробовал в самом начале, причем пустым значение оставить нельзя.
                  Ну поменяете вы для главной на index.php и заморозите, при выводе у вас будет ссылка следующего вида:
                  <a href="http://site.ru/index.php">Главная</a>
                  Василий Наумкин
                  07 февраля 2017, 18:18
                  +1
                  Ради интереса еще замерь, падает ли производительность от лишнего условия, и насколько.

                  Учитывая, про при переходе по uri главной страниц, MODX всё равно делает редирект, писать дополнительную проверку ровно для одной страницы лично мне не хочется.
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              12