У обходчика был разумный предохранитель: не уходить в пагинацию глубже шести страниц. Кто листает каталог дальше шестой? Оказалось — достаточно многие, чтобы это было заметно.

Это двадцать девятая часть цикла «Кэш страниц без MISS».

Арифметика

189 товаров по 15 на страницу — это 13 страниц каталога. Потолок 6 означал, что страницы 7–13 не прогревались никогда. Каждый, кто до них долистывал, получал MISS: от 216 до 707 мс на страницу.

Потолок ставили, когда товаров было меньше, и забыли про него, когда каталог вырос.

Лечение

Глубину пагинации брать из данных, а не из константы: число страниц = число записей ÷ записей на странице.

$per   = (int) get_option('posts_per_page');
$total = (int) wp_count_posts('product')->publish;
$pages = (int) ceil($total / max(1, $per));
for ($i = 2; $i <= $pages; $i++) {
    $paths[] = $archive . 'page/' . $i . '/';
}

После правки перечень вырос с 257 до 274 адресов, адресов с /page/ стало 28 вместо 12.

Если на сайте своё число записей на странице для архива — считайте по нему, а не по общей настройке. Точнее всего — прочитать max_num_pages из запроса этого архива.

Второй слой той же проблемы

Публичные адреса со строкой запроса — фильтры, сортировки в адресе — попадают в перечень только первой страницей. Их пагинация остаётся холодной. Здесь потолок разумен: вариантов фильтров может быть тысячи, и греть все — дороже, чем отдать редкий MISS. Решение о том, какие фильтры греть заранее, — во втором цикле.

Глубокие страницы каталога открываются медленно?

Пришлите адрес — проверю, до какой глубины у вас греется пагинация.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.