Секреты update_postmeta_cache()

Способ увеличения производительности при чтении метаданных записей

Если плагину приходится в цикле читать метаданные для большого количества записей, можно увеличить производительность путём использования функции update_postmeta_cache().

Например, такой код

[-]
View Code PHP
$all_posts = $wpdb->get_col("SELECT `ID` FROM `{$wpdb->posts}` WHERE `post_type` = 'post' ORDER BY `post_title`");
if (false == empty($all_posts)) :
    foreach ($all_posts as $id) :
        $caps = get_post_meta($id, '_disclosesecret_cap');
        //...
    endforeach;
endif;

потребует выполнения n дополнительных запросов, где n — число выбраннных записей.

Код можно сделать гораздо эффективнее, добавив всего одну строку:

[-]
View Code PHP
$all_posts = $wpdb->get_col("SELECT `ID` FROM `{$wpdb->posts}` WHERE `post_type` = 'post' ORDER BY `post_title`");
if (false == empty($all_posts)) :
    update_postmeta_cache($all_posts);
    foreach ($all_posts as $id) :
        $caps = get_post_meta($id, '_disclosesecret_cap');
        //...
    endforeach;
endif;

В этом случае понадобится один дополнительный запрос.

Техническая информация: get_post_meta() вызывает update_postmeta_cache(), если метаинформация не найдена во внутреннем кэше (группа post_meta, ключ $id — уникальный идентификатор записи). Так как update_postmeta_cache() читает все метаданные для указанных записей, получаем пенальти в одно обращение к базе данных на уникальную запись.

update_postmeta_cache() в качестве параметра принимает либо строку (список идентификаторов записей, разделённых запятой), либо массив. "Стоимость" вызова данной функции составляет один запрос к базе данных на весь набор параметров.

Побочные эффекты: если длина SQL-запроса превысит значение переменной max_allowed_packet (для ), запрос к базе данных завершится ошибкой.

Добавить в закладки

Связанные записи

Автор: Vladimir; опубликовано в: Советы; метки: MySQL, WordPress, производительность, советы
1
Окт
2008

RSS Комментарии к статье «Секреты update_postmeta_cache()» (5)  »

  1. [...] К счастью, у проблемы есть решение. Я даже о нём писал — ещё год назад — Секреты update_postmeta_cache(): Способ увеличения производитель…. [...]

  2. Вы не могли бы подсказать, шаблон WP перевожу на русский, все нормально, но заголовки разделов на русском мигают и пропадают, на англ все нормально. В чем может быть причина?

Оставить комментарий к записи «Секреты update_postmeta_cache()»

Вы должны быть авторизованы, чтобы иметь возможность оставить комментарий.

Подписаться, не комментируя