Удалите Ненужный Запрос Mysql


Мои одиночные сообщения получают 31 запрос от mysql. Я проверил все запросы. Я видел этот запрос.

Я использую виджет последние сообщения и категории . Я думаю, что в этом вопросе нет необходимости.Как удалить тему

Query: SELECT option_value FROM xy_options WHERE option_name = 'widget_pages' LIMIT 1
Query: SELECT option_value FROM xy_options WHERE option_name = 'widget_calendar' LIMIT 1
Query: SELECT option_value FROM xy_options WHERE option_name = 'widget_tag_cloud' LIMIT 1
Query: SELECT option_value FROM xy_options WHERE option_name = 'widget_nav_menu' LIMIT 1

Моя боковая панель здесь https://gist.github.com/4546327

 2
Author: ahmetlutfu, 2013-01-16

2 answers

Лучшее, что я могу сказать, это то, что эти виджеты по умолчанию получают параметры из базы данных по мере создания их классов, поэтому невозможно предотвратить запросы к БД, не отключив эти виджеты полностью. В зависимости от ваших потребностей, вам может потребоваться небольшое повышение производительности, и вам не нужны виджеты, в этом случае вы можете использовать этот код, чтобы отключить их (поместите в functions.php ):

// Remove unneeded widgets that have undesirable query overhead
add_action( 'widgets_init', 'remove_unneeded_widgets' );
function remove_unneeded_widgets() {
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Tag_Cloud');
    unregister_widget('WP_Nav_Menu_Widget');
}

Смотрите здесь дополнительные сведения о классе виджетов по умолчанию имена: http://codex.wordpress.org/Function_Reference/unregister_widget

ОБНОВЛЕНИЕ:

Я провел еще несколько исследований и обнаружил, что у этих четырех виджетов нет никаких параметров автоматической загрузки, хотя у нескольких других виджетов есть параметры автоматической загрузки, установленные в функции wp_install_defaults() в /wp-admin/includes/upgrade.php. Это может быть оплошностью. В любом случае, если эти виджеты никогда не загружались на боковую панель, родительский класс WP_Widget или класс виджетов никогда не имели возможности установите любые значения по умолчанию. Другие виджеты созданы и используют get_option(), но не создают запрос, потому что они загружены автоматически с множеством других опций WordPress. У этих четырех нет параметров автоматической загрузки, поэтому get_option() должен запросить базу данных для каждого.

Самое простое решение - просто назначить значения по умолчанию при первой активации темы, например:

// Clean up widget settings that weren't set at installation
add_action( 'after_switch_theme', 'set_missing_widget_options' );
function set_missing_widget_options( ){
    add_option( 'widget_pages', array ( '_multiwidget' => 1 ) );
    add_option( 'widget_calendar', array ( '_multiwidget' => 1 ) );
    add_option( 'widget_tag_cloud', array ( '_multiwidget' => 1 ) );
    add_option( 'widget_nav_menu', array ( '_multiwidget' => 1 ) );
}
 2
Author: cowbellemoo, 2013-02-08 09:36:55

С первого взгляда на ваш код, ваш sidebar.php довольно обширный и изменчивый.

Параметры не загружены непосредственно в ваш sidebar.php, я полагаю, что они будут загружены в ваши виджеты, которых у вас, похоже, несколько. Поскольку в вашей теме, похоже, доступно множество опций, вам необходимо загрузить все эти значения, чтобы обеспечить все функции.

Я настоятельно рекомендую не возиться с кодом в этом случае, так как вы можете потерять функции, которые вам могут понадобиться позже, и 4 вызова get_option(), которые производят вышеуказанный запрос должен быть обработан в кратчайшие сроки.

 0
Author: fischi, 2013-01-16 11:31:31