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

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

Открыть на YouTube

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

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

Комментарии

 

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

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

Ответить

 

Александр

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

Ответить

 

Юрий

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

Ответить

 

Олег

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

Ответить

 

Денис

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

Ответить

 

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

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

Ответить

 

Денис

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

Ответить

 

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

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

Ответить

 

Денис

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

Ответить

 

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

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

Ответить

 

Вадим

Честно говоря, вообще не знаком с 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>