Сегодня наконец додумался как полностью убрать тормоза от моего плагина опитимизировав SQL запосы! Увеличение производительности в 10 раз! Вот только не могу понять как я раньше не додумался
Как это работало раньше: сначала шла основная стандартная WP выборка постов, потом для каждого поста мы получали meta поля это +1 SELECT, затем поучали атачменты еще + 1 SELECT и затем для каждого атачмента получали его мета поля чтобы получить ссылку на превьюшки картинок итого на каждый пост +3 запроса. Если у вас показывается 10 постов на странице то в среднем это +30-40 лишних запросов.
Теперь: после того как получена основная выборка подключается фильтр posts_results собираем список ID всех записей делаем один запрос для того чтобы получить атачменты сразу для всех постов на странице
foreach ($posts as $key => $post) {
$ar_post_id[] = $post->ID;
$ar_link[$post->ID] = & $posts[$key];
}
$st_id = @implode("','", $ar_post_id);
//сначала добываем атачменты
$query = "SELECT $wpdb->posts.* FROM $wpdb->posts
WHERE $wpdb->posts.post_parent IN('$st_id')
AND $wpdb->posts.post_parent
AND $wpdb->posts.post_type = 'attachment' ";
$files = $wpdb->get_results($query);
Далее обединяем в один массив ID постов и ID атачментов и получаем все мета поля для всех ID.
// складываем получаем общий список
$ar_all_id = @array_merge($ar_post_id,$ar_file_id);
$st_id = implode("','", $ar_all_id);
$query = "SELECT * FROM $wpdb->postmeta WHERE post_id IN ('$st_id') ";
$meta = $wpdb->get_results($query);
Вот так вот итого всего + 2 SQL запроса вместо 60 ! Причем посмотрел статистику SQL запросов эти два дополнительных SELECT выполняются в 10 раз быстрее чем основной запрос, где формируется выборка в соответствии с категорийе или тегом.
Даелее данные обрабатываются php сначала все мета данные раскидываются по записям и атачментам добавляем свойство $post->meta[$meta_key]=$meta_value; , а затем атачменты добавляются по своим записям $post->files[]=$file; ну это в общих чертах.
В общем скорость моей доски объявлений теперь практически ничем не уступает простому блогу.
Напоминая что все это будет работать если в настройках плагина включена опция применять шаблоны постов.
Если вы хотите самостоятельно обрабатывать объявления то все таки рекомендую вам воспользоваться этим фильтром подключив его в своем шаблоне в function.php, все мета данные и все картинки будут у вас сразу под рукой, а чтобы увидеть, что где лежит в теле основного цикла просто распечатайте:
echo ‘<pre>'; print_r( $post ); echo ‘</pre>';
В ближайшее время выложу это фильтр отделено.
Проверен на версии 2.7, не пугайтесь размера архива там просто набор шрифтов для генерации капчи.
Чтобы обновится вручную замените только файл ads.php ads_function.php, это не заденет ваши старые настройки.
Pingback: Ads WordPress 3.x - Объявления
Хочу такой модуль, пусть и платно
Понятно, что будет платным, но, думаю, многие будут его покупать. Будем ждать.
Скажите, а для 2.9 плагин идет? Или я неправильно делаю. Устанавливается как плагин, в настройках после активации есть ссылка на ads , но по ней нет перехода лальше. Может это из-за 2.9?
с 2.9 идет
как прикрутить эту доску к блогу? например — как пункт меню. спасибо
Pingback: