Entfernen Sie die unnötige Mysql-Abfrage

Meine einzelnen Posts bekommen 31 Abfragen von MySQL. Ich habe alle Fragen überprüft. Ich habe diese Abfrage gesehen.

Ich verwende das Widget ” Letzte Beiträge und Kategorien” . Ich denke, dass dort Abfrage unnötig ist. Wie man Thema entfernt

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

Meine Sidebar ist hier https://gist.github.com/4546327

Solutions Collecting From Web of "Entfernen Sie die unnötige Mysql-Abfrage"

Am besten kann ich sagen, dass diese Standard-Widgets Optionen aus der database abrufen, wenn ihre classn erstellt werden, sodass es keine Möglichkeit gibt, die DB-Abfragen zu verhindern, ohne diese Widgets vollständig zu deaktivieren. Abhängig von Ihren Bedürfnissen, möchten Sie vielleicht eine leichte performancessteigerung und benötigen die Widgets nicht. In diesem Fall können Sie diesen Code verwenden, um sie zu deaktivieren (in functions.php platzieren):

 // 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'); } 

Hier finden Sie weitere Standard-Widget-classnnamen: http://codex.wordpress.org/Function_Reference/unregister_widget

AKTUALISIEREN:

Ich habe weitere Nachforschungen angestellt und festgestellt, dass diese vier Widgets keine automatisch geladenen Optionen haben, obwohl einige andere Widgets automatisch geladene Optionen haben, die in der function wp_install_defaults() in /wp-admin/includes/upgrade.php . Dies kann ein Versehen sein. Wenn diese Widgets nie in eine Sidebar geladen wurden, hatten die WP_Widget oder die WP_Widget niemals die Möglichkeit, WP_Widget . Die anderen Widgets sind konstruiert und verwenden get_option() , erzeugen aber keine Abfrage, da sie mit vielen anderen WordPress-Optionen get_option() . Diese vier Optionen haben keine Optionen zum get_option() sodass get_option() die database für jede Abfrage abfragen muss.

Die einfachste Lösung besteht darin, einfach die Standardwerte zu vergeben, wenn das Design zum ersten Mal aktiviert wird:

 // 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 ) ); } 

Aus einem Blick auf Ihren Code ist Ihre sidebar.php sehr umfangreich und variabel.

Die Optionen werden nicht direkt in deine sidebar.php geladen, ich nehme an, sie werden in deine Widgets geladen, von denen du einige zu haben sidebar.php . Da für Ihr Theme viele Optionen verfügbar sind, müssen Sie alle diese Werte laden, um alle functionen zu gewährleisten.

Ich empfehle dringend, nicht mit dem Code in diesem Fall zu verwirren, da Sie functionen verlieren könnten, die Sie später benötigen, und die 4 Aufrufe von get_option() , die die obige Abfrage erzeugen, sollten in kürzester Zeit behandelt werden.