<?php $categories = get_the_category($post->ID); if ($categories) { $category_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, 'post__not_in' => array($post->ID), 'orderby'=> 'rand', //sort by random 'showposts'=>5, // Number of related posts that will be shown. 'caller_get_posts'=>1 ); // Rest is the same as the previous code $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo '<b>Related Posts:</b><p>'; while ($my_query->have_posts()) { $my_query->the_post(); ?> <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a><br /> <?php } echo '</p>'; } wp_reset_query(); } ?>
подскажите, как в верхнем коде заменить 'orderby'=> 'rand' на что то типа
function show_random_posts_optimized($count = 3) { $start = microtime(true); $args = array( 'numberposts' => -1, 'fields' => 'ids', 'post_type' => 'any', ); $random_posts_ids = get_posts($args); $rnd_posts = array_rand($random_posts_ids, $count); foreach ( $rnd_posts as $post_index ) { $id = (int)$random_posts_ids[$post_index]; $post = get_post($id); echo '<p><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></p>'; } $stop = microtime(true); echo '<p>Затраченное время: '.($stop - $start).'</p>'; }
попробую, файлсорт в данном случае сортирует более 150к строк, процессор сервера это напрягает.
А тем временем :)
источник: https://twitter.com/KimDotcom
версия WP 2.8
что нужно добавить в код шаблона, чтобы на нём стал отображать показания WP-Tuner?
пока он только для админки показывает.
как отключить вызов 2-х опций, чтоб они не давали запросов к базе данных?
SELECT option_value FROM wp_options WHERE option_name = 'feedwordpress_automatic_updates' LIMIT 1
SELECT option_value FROM wp_options WHERE option_name = 'sidebars_widgets' LIMIT 1
виджеты и сайдбар у меня прописаны в коде темы, автоматическое обновление тоже отключено, пробовал в файл functions.php шаблона
добавлять
add_option('sidebars_widgets', $value, '', 'no');
но запрос по прежнему идёт, только уже с функций темы.
это надо добавлять ещё до вызова темы, а куда именно непонятно, может кто подскажет?
sj_object_cache+xcache помог, действительно лучшее решение для WP.
отключил сейчас hyper-cache и нагрузка LA 0.14 0.13 0.12 стала меньше, с гипер-кешем было 0.50 0.30 0.25 похоже действительно генерация страничек в кеш много ресурсов жрёт, но без html кеша тоже никак, он спасает при обновлении сайта.
Попробую SJ Object Cache у меня как раз xcache стоит.
надеюсь он может совместно с hyper-cache работать или его придётся отключать?
в секцию [mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
skip-innodb
memlock
query_cache_type = 1
query_cache_limit = 2M
query_cache_size = 32M
из громоздких запросов там, самый тормоз вот
SELECT SQL_CALC_FOUND_ROWS wp_posts . * FROM wp_posts INNER JOIN wp_term_relationships ON ( wp_posts.ID = wp_term_relationships.object_id ) INNER JOIN wp_term_taxonomy ON ( wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id ) WHERE 1 =1 AND wp_term_taxonomy.taxonomy = 'category' AND wp_term_taxonomy.term_id IN ( '49' ) AND wp_posts.post_type = 'post' AND ( wp_posts.post_status = 'publish' ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 24000 , 10
в конфиг my.cnf пытался добавить memlock но он не срабатывает, в переменных по прежнему locked in memory OFF
можно поподробнее, как nginx кешировать?
конфиг nginx
из документации: если в таблицах используются поля типов TEXT (TEXT, TINYTEXT, MEDIUMTEXT …) или BLOB, то таблица не может быть размещена в памяти, а только на диске.
из кеширующих плагинов hyper-cache стоит, помогает, но только при повторном обращении к странице, сайт довольно часто обновляется, 3-4 раза в сутки, посещалка 9-10к уников, поэтому кеш после обновлений сбрасывается, естественно эффективности мало от него.