Мы замечали очень долгое время загрузки при редактировании поста или страницы. Используя Query Monitor, мы обнаружили, что этот основной запрос WP занимает до 15-20 секунд.
SELECT meta_key
FROM wp_postmeta
GROUP BY meta_key
HAVING meta_key NOT LIKE '\\_%'
ORDER BY meta_key
LIMIT 30
caller:
meta_form()
post_custom_meta_box()
do_meta_boxes()
Мы используем много постметов, так как один из наших типов постов использует около 20 или около того пользовательских полей. Я бы сказал, может быть, мы слишком полагаемся на postmeta, но это кажется очень неэффективным запросом, поскольку он даже не выбирает идентификатор сообщения.
Это общая проблема? Есть ли способ отключить эту функцию через фильтр? Спасибо за любой вклад.
meta_form()
функцию, и это действительно сгенерированный запрос SQL из этой основной функции. Вы можете попытаться добавить свой собственный метабокс с изменениями в кодеmeta_form()
и использовать предложенный SQL-запрос. Я нашел этот закрытый билет # 8561 . Возможно, вы могли бы создать еще один билет или попытаться снова открыть этот? PS: обратите внимание, что выбор метабокса для родительской страницы также проблематичен. Если у вас есть 1 миллион страниц, то все они будут отображаться как выбранные варианты!meta_form()
функцию. Я обновил ответ - основной запрос SQL был скорректирован в WP версии 4.3. Видите ли вы какой-либо выигрыш в производительности с этим новым запросом SQL по сравнению с нашими дополнительнымиpost_id
ограничениями?Ответы:
Если вы хотите проверить свой пользовательский SQL, чтобы увидеть, как он влияет на время загрузки, вы можете попробовать поменять местами этот запрос:
Здесь мы используем
add_meta_boxes_{$post_type}
крюк, где$post_type = 'post'
.Здесь мы поменяем местами весь запрос, но мы могли бы также настроить его для поддержки динамического ограничения.
Надеюсь, вы можете настроить это в соответствии с вашими потребностями.
Обновить:
Этот потенциально медленный запрос ядра SQL теперь был изменен в WP версии 4.3 с
чтобы:
Проверьте основной билет # 24498 для получения дополнительной информации.
источник
Если вы просмотрите исходный код функции, вы найдете это:
Используя
postmeta_form_keys
хук, вы можете вручную указать ключи, чтобы вообще не вызывать этот неэффективный запрос:источник
Можете ли вы попробовать это. Это не решение, а временное решение.
источник
Удаление метабоксов также предотвращает медленный запрос.
источник