Ars Longa, Vita Brevis

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

Если плагину приходится в цикле читать метаданные для большого количества записей, можно увеличить производительность путём использования функции 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 (для MySQL), запрос к базе данных завершится ошибкой.

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

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

К статье "Секреты update_postmeta_cache()" комментариев нет. Может быть, Вы хотите прокомментировать статью?

RSS лента комментариев к этой записи. TrackBack URL

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

Изображения должны быть включены!

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

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