Задача
WordPress Meta Query не так гибок, как обычный запрос в отношении выбора дат. WP Query может выбирать даты по номеру месяца, имени дня недели и многим другим вариантам, которые подходят для того, что мне нужно.Wordpress медленный мета-запрос на 1000+ сообщений
ACF Поля
Дата Событие, Дата окончания, дата смерти (некоторые Taxonomies), «Repeat (Навсегда, До)»
В принципе я построил мета запрос, который получит даты, которые приземляются на сегодня , или это может быть повторяющимся (поэтому Daily, Monthly и Weekly), а затем я фильтрую все через PHP, сравнивая его с именем недели недели для еженедельного и числом дней в месяц. Я также проверяю, чтобы все повторяющиеся сообщения не отображались, когда они не должны были быть.
Вот мета массив запросов я использую дату хранится в Ymd
:
'relation' => 'OR', [ 'key' => 'event_date', 'value' => $date->format('md'), 'compare' => 'LIKE', 'type' => 'numeric' ], [ 'key' => 'death_date', 'value' => $date->format('md'), 'compare' => 'LIKE', 'type' => 'numeric' ], [ 'key' => 'how_often', 'value' => array('Daily', 'Monthly', 'Weekly'), 'compare' => 'IN' ]
Чтобы поставить его в перспективе, этот запрос будет получать ~ 130 сообщений, в том числе мета- и других связанных с ними запросов, и после того, как PHP запустил фильтрацию сообщений (что занимает 2,5 секунды!), я оставил 78 сообщений.
Что я Пробовал
Я попытался ограничить запрос еще будучи очень специфичным для повторяющихся сообщений, как с указанием, что event_date
должен быть <=
запрашиваемой дата, и либо end_date
является >=
запрашиваемыми дата или мета forever
установлено на forever
. Однако это не поможет, когда дело доходит до ежемесячного или недельного повторения, поскольку у меня нет возможности правильно рассчитать эти даты. Я уже загрузил более 10 тыс. Сообщений и использовал эту обычную метаструктуру. Он работал нормально с примерно 1200 сообщениями, после чего сайт стал очень вялым. страница с 78 сообщениями в настоящее время занимает около 8-12 секунд для загрузки первого байта.
Я пробовал кешировать эти данные, но кто-то мог ударить в любой день в календаре, и это может быть не кешировано, что приведет к тому, что пользователь будет удерживаться на 8-12 секунд, прежде чем они что-нибудь заметят с сайта.
Вопросы
- Каков наилучший способ идти о получении ежемесячных и еженедельных повторяющихся сообщений через SQL?
- Будет ли это на самом деле ускорить загрузку моей страницы или это замедлит ее? Очевидно, что с большим количеством сообщений появляется больше запросов для мета, но разбиение на страницы на самом деле не является вариантом для этого приложения.
Спасибо за предложения, но я думаю, что робот убил бы сервер довольно быстро. –