очерёдность исполнения $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 шт):
А нельзя повесить на событие данный рендер? Нашел в доке, что можно инитить и триггерить свои ивенты. Соответственно возможно это вам и надо? Так же увидел вот такие события на одном из форумов, сам не проверял:
Компонент представления yii\base\View :
- EVENT_AFTER_RENDER
- EVENT_BEFORE_RENDER
- EVENT_END_PAGE
- EVENT_BEGIN_PAGE
Вы пытаетесь решить проблему не стой стороны. Вместо лечения причины - лечите последствия. Найдите причину тормозов из-за рендеринга menu - долгие запросы в БД, подгрузка со сторонних ресурсов, файл лежит на подмапленном по ssh с другого сервера разделе, файл лежит на битых секторах диска и тд и тп.
А подгрузка после загрузки страницы проблемы не решит - ну увидит пользователь ajax-loader вместо меню в течении нескольких секунд пока идет подгрузка - думаете это спасет ситуацию? Пользователь нонче вредный, может фыркнуть и свалить с сайта который по его мнению подтормаживает...