У обходчика был разумный предохранитель: не уходить в пагинацию глубже шести страниц. Кто листает каталог дальше шестой? Оказалось — достаточно многие, чтобы это было заметно.
Это двадцать девятая часть цикла «Кэш страниц без 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. Решение о том, какие фильтры греть заранее, — во втором цикле.
Глубокие страницы каталога открываются медленно?
Пришлите адрес — проверю, до какой глубины у вас греется пагинация.
// загружаю комментарии…