При открытии категории в каталоге сайта, происходят очень длинные загрузки, по пол минуты и по минуте. Сервер настроили как могли, и кеширования всякие, с этим все ок. Я подозреваю что какой то запрос написан коряво и при открытии категории с 1000 позициями, запрашивается информация не для 50 товаров за раз (пагинация так настроена) а для всей 1000, а учитывая что они вариативные и происходят задержки.
Может есть у кого примеры когда который может это оптимизировать/исправить, ну или подскажите из-за чего так может быть, может есть у кого пример нормального запроса для вывода категорий больших?
Не понял ваш юмор, вы не видели каталогов больших? Не знаете слово пагинация? И да я уверен что дело в плохом коде, профайлер показывает что запрос этот связан с атрибутами, тоесть при открытии категории большой, зачем то тянется вся информация о всех атрибутах товаров в данной категории, по логике же эта информация должна браться только для тех товаров что видны на текущей странице (для отображаемых 50 товаров).
Лучше сделать запрос (даже по 50) и аяксом подгружать дополнительное количество при скролле или нажатию на кнопку, лучше вы не оптимизируете. В интернете есть инфа на эту тему...
P.S: Мне тоже страшно представить, что там за зверь такой)
ДА какая разница аяксом или чем, страницы разбиваются уже и так по 50. Вопрос как сделать это разбивание грамотно чтобы экономить ресурсы. Тыкните пальцем в пример
Woocommerce из коробки делает нормальные запросы учитывая пагинацию. Зачем нужно было выкручивать ему мозг.
Но если вы все таки хотите таких запросов, то Вам нужно кэшировать результат запроса в объектном кэше. К тому же для адекватной работы объектного кэша, в вашем случае , нужен Redis. Он позволит хранить промежучные результаты бд-запросов между http-запросами. Тогда у Вас будет долго длиться только первое обращение к странице.
Redis то может быть настроен, но если я делаю кастомный запрос, через getposts, то это идет в обход redis. можете поставить плагин QueryMonitor и посмотреть (он покажет кол-во запросов которые идут к базе). Скорее всего у Вас редис организован через плагин. Вы можете в плагине сбросить весь кэш редиса и проверить как изменится ко-во запросов между первым и вторым обращением к странице.
Вот пример работы редиса. На страницу товара подгружается конструктор который позволяет гибко выбирать разные связанные основным товары и их разновидности и кодать их в корзину. Разница колоссальная, 1100 против 64 запросов.
пример работы редиса
Тут поможет только исправление плохого кода.
Тогда у Вас 2 пути
1й - разобрать всю логику шаблона и переписать ключевые функции.
2й - найти где в шаблоне делается запрос и принудительно его в редис
Пычев Анатолий, А как принудительно в редис запрос направить? Попробую сейчас протестировать, так то я через redis-cli смотрел, работает нормально, но может быть действительно не везде где нужно.