Удалите Ненужный Запрос 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 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 ) );
}
С первого взгляда на ваш код, ваш sidebar.php
довольно обширный и изменчивый.
Параметры не загружены непосредственно в ваш sidebar.php
, я полагаю, что они будут загружены в ваши виджеты, которых у вас, похоже, несколько. Поскольку в вашей теме, похоже, доступно множество опций, вам необходимо загрузить все эти значения, чтобы обеспечить все функции.
Я настоятельно рекомендую не возиться с кодом в этом случае, так как вы можете потерять функции, которые вам могут понадобиться позже, и 4 вызова get_option()
, которые производят вышеуказанный запрос должен быть обработан в кратчайшие сроки.