очерёдность исполнения $this->render в теле страницы (Yii2)

У меня есть главный шаблон views/layouts/main.php в котором происходит подключение:

$this->head()
$this->beginBody();
echo $this->render('..' . DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR . '_header_index').PHP_EOL;
echo $this->render('..' . DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR . 'menu').PHP_EOL;
echo $content;
echo $this->render('..' . DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR . '_footer').PHP_EOL;
$this->endBody();
$this->endPage()

Среди этого всего есть, как видите

echo $this->render('..' . DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR . 'menu').PHP_EOL;

и мне очень не нравится, что оно грузится до того как загрузилась страница. Несмотря на то, что эта часть у меня в кеше из-за довольно-таки большого массива html подгрузка меню в такой очерёдности убивает около 8-9% по показателю пейджспида от гугла.

Соответственно вопрос: как можно зарендерить это меню в это же место, где оно находится сейчас после загрузки страницы? Может есть параметр, отвечающий за очерёдность загрузки блоков страницы? Самый плохой вариант, как по мне, - это

$(document).ready(function(){
//и как-то тут рендерить
})

Может кто-то знает какой-то виджет или плагин, который позволяет назначать очерёдность загрузки блоков и назначать события по которым они подгружаются? Не охота везде голый Query и Ajax тулить, хочется модулем каким-то.


Ответы (2 шт):

Автор решения: Ivan Pany

А нельзя повесить на событие данный рендер? Нашел в доке, что можно инитить и триггерить свои ивенты. Соответственно возможно это вам и надо? Так же увидел вот такие события на одном из форумов, сам не проверял:

Компонент представления yii\base\View :

  1. EVENT_AFTER_RENDER
  2. EVENT_BEFORE_RENDER
  3. EVENT_END_PAGE
  4. EVENT_BEGIN_PAGE
→ Ссылка
Автор решения: phpBear

Вы пытаетесь решить проблему не стой стороны. Вместо лечения причины - лечите последствия. Найдите причину тормозов из-за рендеринга menu - долгие запросы в БД, подгрузка со сторонних ресурсов, файл лежит на подмапленном по ssh с другого сервера разделе, файл лежит на битых секторах диска и тд и тп.

А подгрузка после загрузки страницы проблемы не решит - ну увидит пользователь ajax-loader вместо меню в течении нескольких секунд пока идет подгрузка - думаете это спасет ситуацию? Пользователь нонче вредный, может фыркнуть и свалить с сайта который по его мнению подтормаживает...

→ Ссылка