Секреты update_postmeta_cache()
Способ увеличения производительности при чтении метаданных записей
Если плагину приходится в цикле читать метаданные для большого количества записей, можно увеличить производительность путём использования функции update_postmeta_cache().
Например, такой код
if (false == empty($all_posts)) :
foreach ($all_posts as $id) :
$caps = get_post_meta($id, '_disclosesecret_cap');
//...
endforeach;
endif;
потребует выполнения n дополнительных запросов, где n — число выбраннных записей.
Код можно сделать гораздо эффективнее, добавив всего одну строку:
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), запрос к базе данных завершится ошибкой.
Связанные записи
Автор: Vladimir; опубликовано в: Советы; метки: MySQL, WordPress, производительность, советыОкт
2008


Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.






[...] К счастью, у проблемы есть решение. Я даже о нём писал — ещё год назад — Секреты update_postmeta_cache(): Способ увеличения производитель…. [...]
Вы не могли бы подсказать, шаблон WP перевожу на русский, все нормально, но заголовки разделов на русском мигают и пропадают, на англ все нормально. В чем может быть причина?
Ссылку посмотреть дадите?
Да, в подписи к имени http://www.poshivchik.ru/
У меня всё нормально отображается. Напишите мне, пожалуйста, в аську или GTalk.