Пример использования кеширования в Yii2
Спонтанный вебинар о применении кеширования данных, фрагментов и страниц в Yii2 на примере каталога с прошлого скринкаста. Рассмотрели несколько вариантов и ответили на интересные вопросы зрителей:
Приглашаю на следующие видеоуроки. Анонс и ссылку на эфир, как обычно, пришлю в отдельной рассылке по вебинарам:
И задавайте вопросы в комментариях. Спасибо заранее!
Дмитрий ЕлисеевC renderDynamic это, вроде, не баг.
АлександрА что это, если оно не работает?
Дмитрий ЕлисеевОтветил в https://github.com/yiisoft/yii2/issues/11689
ЮрийСпасибо...
за проделанную работу..
жаль что всю инфу что ты даешь сразу не получается усвоить..)))
Олег – 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 спасибо, хорошая подсказка, буду смотреть в эту сторону.
Максим ВикулинДмитрий, спасибо большое за видео. За три часа с небольшим очень доступно объяснили. Для себя к вашему видео всегда пишу справки, типа:
Помогает быстро вспомнить о нужной информации в работе.
Еще раз огромное спасибо!