Секреты update_postmeta_cache()

Vladimir
Опубликовано в: Советы

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

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

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

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

1
Окт
2008

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

К статье «Секреты update_postmeta_cache()» комментариев пока нет. Не хотите ли стать первым?

Подписаться на RSS-ленту комментариев к статье «Секреты update_postmeta_cache()» Trackback URL: http://blog.sjinks.org.ua/wordpress/tips-and-tricks/349-secrets-of-update_postmeta_cache/trackback/

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

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

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

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