Пример использования кеширования в Yii2

Спонтанный вебинар о применении кеширования данных, фрагментов и страниц в Yii2 на примере каталога с прошлого скринкаста. Рассмотрели несколько вариантов и ответили на интересные вопросы зрителей:

Открыть на YouTube

Приглашаю на следующие видеоуроки. Анонс и ссылку на эфир, как обычно, пришлю в отдельной рассылке по вебинарам:

И задавайте вопросы в комментариях. Спасибо заранее!

Комментарии

 

Дмитрий Елисеев

C renderDynamic это, вроде, не баг.

Ответить

 

Александр

А что это, если оно не работает?

Ответить

 

Юрий

Спасибо...
за проделанную работу..
жаль что всю инфу что ты даешь сразу не получается усвоить..)))

Ответить

 

Олег – housediz.com

Очень круто, мне до такого гениального кода еще далеко. Спасибо.

Ответить

 

Денис

А можно что-нибудь приземленное изучать, типа вывода иерархического меню или использования kartik yii2-grid c экспортом в эксель) Это конечно очень круто кеширование, когда в основном у тебя посещаемость максимум 20 человек в день)

Ответить

 

Дмитрий Елисеев

Здесь мы иерархическое меню для категорий и сделали. А с kartik - устанавливаем и делаем по инструкции.

Ответить

 

Денис

Еще из насущных проблем: как зафигачить jabber чат на сайт, с обновлением естественно в реальном времени. Ну и про панель с правой стороны на yii2 заодно расскажите)

Ответить

 

Дмитрий Елисеев

Для jabber интегрируем что-нибудь вроде этого. А панель мы и сделали с виджетами категорий и меток в каталоге.

Ответить

 

Денис

Доброго времени суток, Дмитрий! Научите, пожалуйста делать свои шаблоны для генеоации CRUD правильно. Чем больше хороших и коротких уроков типа рецептов по Yii у вас будет, тем больше будет посещаемость. Длинные видеоуроки очень тяжело смотреть. А что-то по-быстрому найти- вообще нереально у вас в видео).
Я конечно не достоин кого-то учить. Но это так, мое небольшое замечание и просьба)

Ответить

 

Дмитрий Елисеев

Про CRUD уже есть.

Ответить

 

Вадим – workip.ru

Честно говоря, вообще не знаком с Yii2, однако все чаще встречаю упоминаю о нем. Видимо идет динамика роста популярности, надо проверить статистическую информацию.
Вообще интересная, конечно, тема. В свободное время надо заняться изучением. Думаю, все получится, ведь познания в программирования на языках вроде html, php, c++ и некоторых других имеются.

Ответить

 

Дмитрий

Привет. Мне не совсем понятно о каком гигабайте памяти идет речь начиная с 2:31:40 (http cache) и почему нужно быть осторожным с user id . Там ведь речь об http cache. То есть, в зависимости от нашего заголовка (etag или last modified) все кэшируется в браузере у клиента. Не понятно причем тут гигабайт памяти. Пожалуйста проясните эту ситуацию если я что-то не так понял.

Ответить

 

Дмитрий Елисеев

Нужно быть осторожным с user->id при обычном кеше.

Ответить

 

Дмитрий

И еще один вопрос про кэширование статики на отметке 2:57:30. Мне не совсем понятно зачем нужно специально что-то делать для инвалидирования статики (например использовать appendTimestamp в assetManager) . По-умолчанию, веб-сервер (nginx например) отдает статику с нормальными заголовками, то есть берет дату и время последнего изменения из статичного файла (js, css, jpg итд) и передает их в заголовок last modified. Таким образом, если мы изменяем статичный файл на сервере, то он и придет клиенту в браузер со статусом 200 и сразу закэшируется в браузере. В след. раз при обновлении страницы этот файл уже будет браться из кэша браузера (статус 304). Там правда есть нюанс с опцией nginx sendfile, если sendfile отключен то все работает как и должно без всяких добавлений таких параметров как ?v=... В итоге, мне не ясно зачем нужно что-то делать специально для кэширования статики если это в вебсервере все уже настроено и логично (на мой взгляд) работает.

Ответить

 

Дмитрий Елисеев

Если всё работает и браузер запрашивает с If-Modified-Since, то не нужно.

Ответить

 

Алина Есенина

Вопрос немного не по кэшированию, просто в своём видео вы затронули вопрос activateParents

    use yii\bootstrap\Nav;
    echo Nav::widget([
        'options' => ['class' => 'x-navigation x-navigation-custom'],
        'items' => array_filter([
            '<li class="xn-logo">
            <a href="/">' . Yii::t('app', 'App title') . '</a>
            <a href="#" class="x-navigation-control"></a>
        </li>',
            [
                'label' => Yii::$app->params['department']['icon'] . '<span class="xn-text">' . Yii::t('app', 'Departments') . '</span>',
                'url' => ['/department/default/index'],
            ]
        ]),
        'encodeLabels' => false,
        'activateParents'=>true,
    ]);

Как раз в своей системе никак не могу победить это баг. Т.е. если перехожу по url: site/department - то меню подсвечивается, как активное, а если site/department/1 то уже не подсвечивается

Работает через модули, как вы поняли

Ответить

 

Дмитрий Елисеев

Ну так у Вас вложенных подпунктов нет, чтобы срабатывало activateParents. Проставляйте активность вручную:

[
    'label' => Yii::t('app', 'Departments'),
    'url' => ['/department/default/index'],
    'active' => $this->contenxt->module->id == 'department',
]
Ответить

 

Алина Есенина

Дмитрий, спасибо большое.

Ответить

 

Темир

Добрый день, не получается настроить pagecache, есть экшн

public function actionViewService($slug)
{
    $model = Service::findOne(['slug' => $slug]);
    return $this->render('view_service', [
        'model' => $model
    ]);
}

пишу

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\PageCache',
            'only' => ['view-service'],
            'duration' => 9999, 
        ],
    ];
}

Так вот он кэширует только первую посещенную страницу с этого экшна, при переходе на другие показывает только эту первую закешированную.

Что нужно прописать чтобы остальные страницы с этого экшна тоже каэшировались и показывали свою страницу.

Ответить

 

Дмитрий Елисеев
'variations' => [Yii::$app->request->get('slug')],
Ответить

 

Темир

Дмитрий, спасибо за помощь, получилось:-)

Ответить

 

Павел

Подскажите, можно ли использовать pageCache в проекте интернет магазина? В частности где есть корзина, просмотренные товары и тд и тп. У меня при включении pageCache, кэшируется вся страница целиком и счетчики не обновляются в итоге(

Ответить

 

Дмитрий Елисеев

Только если виджеты со счётчиками не рендерить сразу в коде самой страницы, а подгружать по Ajax.

А так для динамических сайтов PageCache не очень полезен. Удобнее кешировать фрагментами.

Ответить

 

Павел

Фрагментарное настроено, но результат скорости загрузки главной хотелось бы видеть еще меньше.

С Ajax спасибо, хорошая подсказка, буду смотреть в эту сторону.

Ответить

 

Максим Викулин

Дмитрий, спасибо большое за видео. За три часа с небольшим очень доступно объяснили. Для себя к вашему видео всегда пишу справки, типа:

  • 1.14 кеш участков кода (блоки)
  • 1.21 кеш произвольных данных на примере виджета
  • 1.42 кеширование страниц

Помогает быстро вспомнить о нужной информации в работе.

Еще раз огромное спасибо!

Ответить

Оставить комментарий

Войти | Завести аккаунт | Войти через


(никто не увидит)





Можно использовать теги <p> <ul> <li> <b> <i> <a> <pre>