Пробовал для этого следующие способы: Last-Modified и ETag Header.
Страницу с GridView кэширует и отображает быстро. Проблема возникает тогда, когда происходит обновление данных.
Проблема – это отображение старых данных вместо новых.
Заметил, что только при обновлении по кнопке в строке браузера данные обновляются на новые – а если открывать страницу по ссылкам на сайте – страница отображается из кэша со старой информацией (проверял в Safari и Chrome)
В качестве примера использовал документацию
https://www.yiiframework.com/doc/guide/ ... ching-http
Пример с Last-Modified делал так:
Код: Выделить всё
[
'class' => 'yii\filters\HttpCache',
'only' => ['index'],
'lastModified' => function ($action, $params) {
$q = new \yii\db\Query();
return $q->from('word')->max('updated_at');
},
],
Код: Выделить всё
[
'class' => 'yii\filters\HttpCache',
'only' => ['index'],
'etagSeed' => function ($action, $params) {
$q = Word::find()
->asArray()
->all();
return serialize([$q]);
},
],
https://ibb.co/C7Vjyby
Запись с экрана как работает кэширование:
Last-Modified
https://youtu.be/FIqRTyT-uaI
ETag Header
https://youtu.be/5GQdHeIqM8k
Вопрос:
1. Подскажите, пожалуйста, что я неправильно сделал или как правильно использовать http кэширование?
2. Интересует решение когда есть много записей, например 100 тыс. или несколько миллионов. Как правильно в таких случаях кэшировать GridView чтоб сохранить скорость работы сайта и при этом чтобы отображало обновленные данные?
Спасибо!