Вы здесь

Оптимизация меню из пунктов-терминов таксономии

0

Из-за вывода блока меню (около 60 пунктов в 2-уровневой иерархии) сайт дико тормозит. Меню построено с помощью Taxonomy Menu, все эти пункты - термины таксономии. Плюс еще 2 языка на сайте.
Среди запросов огромное количество _taxonomy_menu_get_item, menu_get_item, DrupalDefaultEntityController::load, metatag_metatags_load_multiple

Вот то что показывает devel с включенным блоком меню и без него:

Executed 2233 queries in 983.98 ms. Queries exceeding 5 ms are highlighted. Page execution time was 13535.76 ms. Memory used at: devel_boot()=5.29 MB, devel_shutdown()=179.34 MB, PHP peak=195.75 MB.

Executed 178 queries in 145.01 ms. Queries exceeding 5 ms are highlighted. Page execution time was 1544.43 ms. Memory used at: devel_boot()=5.31 MB, devel_shutdown()=68.13 MB, PHP peak=74 MB.

Сверх тяжелых запросов нет, самые тяжелые - _locale_rebuild_js около 100мс +-. Еще два на 5-10 мс. Все остальные меньше 5мс. Но их нереально много.

Как можно оптимизировать вывод меню? В голову пока приходит только скриптом генерировать чистый хтмл и выдавать его вместо блока меню. Но хотелось бы как-то более красиво решить этот вопрос.

Версия Drupal: 
7.x
Категория: 
Menu APIPerformanceTaxonomy API
Связанные проекты: 
Taxonomy menu
Вопрос задан 27.10.2015 - 21:04

виртуальный сервер. хостинг адекватный, на нем хостится еще несколько проектов, они работают отлично, у этих проектов нет меню из таксономии.

Комментарий оставлен 27.10.2015 - 21:11

Может, с кешированием что-то не то ? Закешировать этот блок возможно ?

Комментарий оставлен 27.10.2015 - 21:15

Можно, кешируется без проблем на странице. Во второй раз анонимам выводится страница меньше чем за секунду. Но первый раз страницу все равно грузит по 10-20 секунд. Это вообще неприемлемо.

Комментарий оставлен 27.10.2015 - 21:17

Ну если такая ситуация и изменить хостинг нельзя принципиально, то может быть, поступить таким образом ?
Сделать так, чтобы сначала отобразилась страница с пустым блоком, а потом с помощью JQuery + AJAX дотянулся бы этот блок ? То есть, страница уже есть и отображается посетителям, и в это время на страницу дотягивается этот блок.

Комментарий оставлен 27.10.2015 - 21:27

Ответы

2
Ответ дан 27.10.2015 - 21:28
Аватар пользователя xandeadx
xandeadx
1542

Это просто магия какая-то. Огромная благодраность!

После добавления модуля с таким кодом:
Executed 911 queries in 398.25 ms. Queries exceeding 5 ms are highlighted. Page execution time was 2314.41 ms. Memory used at: devel_boot()=5.3 MB, devel_shutdown()=72.46 MB, PHP peak=78.5 MB.

дальше есть куда стремиться, конечно. Но этот блок с меню таксономии теперь хоть не генерируется по 10 секунд.

Комментарий оставлен 27.10.2015 - 22:24
0

Попробуйте модуль taxonomy menu block. Была такая же проблема на одном из сайтов, это помогло

Ответ дан 27.10.2015 - 21:32
Аватар пользователя shu
shu
173

Проверил, тоже отлично сокращает время генерации страницы, но в моем конкретном случае не подходит из-за других моментов.
Если кто столкнется с похожей проблемой - можно смело использовать этот модуль.

Комментарий оставлен 27.10.2015 - 23:10
0

Сначала попробуйте замерить производительность без блоков с таксономи-меню.
Если точно только они так влияют на нагрузку, значит надо придумать, как их генерировать менее затратно по ресурсам.

Если количество уровней меню постоянно(как вы писали - 2 уровня) то такое меню можно сгенерировать и вьюсом.
Количество запросов в любом случае должно уменьшиться.
Ну и однозначно - кэширование результата.

Ответ дан 27.10.2015 - 21:52