Die Antwort: Ja, die theme_mod-Funktionen sind langsamer, aber nicht wesentlich, und die Vorteile überwiegen die Unterschiede.
Theme-Mods werden als Optionen gespeichert. Die theme_mod-Funktionen sind also im Wesentlichen Wrapper um die options-Funktionen.
Verstehen Sie zunächst, dass theme_mod-Einstellungen als Array in einer einzelnen Option gespeichert werden, die auf den jeweiligen Themennamen festgelegt ist. Also, wenn ich das mache:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Was ich dann tatsächlich in der Datenbank bekomme, ist eine einzelne Optionszeile mit dem Namen theme_mods_themename, die ein serialisiertes Array mit ('aaa' => 123, 'bbb' => 456) enthält.
Jetzt get_theme_mod
wird langsamer, weil es tatsächlich zwei get_option
Anrufe macht. Zuerst wird der Name des Themas abgerufen. Dann bekommt es die theme_mods_themename
Option. Genau da ist also ein Geschwindigkeitsverlust von 50%. Der Rest der Arbeit besteht hauptsächlich aus Filtern, da es einen zusätzlichen Filteraufruf gibt. Wenn Sie jedoch nicht über einen Filter verfügen, ist dieser unbedeutend.
Beachten Sie, dass das Optionssystem abgerufene Daten im Objektcache speichert, sodass hier nicht mehrere Datenbankaufrufe ausgeführt werden. Nur die erste Verwendung führt zu einem Datenbank-Treffer.
Das set_theme_mod
wird etwas langsamer sein, weil es dieselben zwei get options-Aufrufe ausführt, dann einen weiteren get_option
Aufruf ausführt, um den Themennamen erneut abzurufen, und dann update_option
mit dem vollständigen Satz der jetzt geänderten Optionen. Dies führt zu einer Datenbankaktualisierung, und die Tatsache, dass viel mehr Daten gesendet werden, kann in der Tat die Ursache für eine spürbare Verlangsamung sein. Das Aktualisieren einiger Bytes ist schneller als das Aktualisieren einer größeren Zeile. Aber normalerweise nicht so sehr, wie Sie bemerken würden. Es sei denn, Sie haben eine ganze Menge Einstellungen ...
Die Theme-Mod-Funktionen sind sicherlich insgesamt zu optimieren, aber Sie sollten sie trotzdem anstelle von get_option und solchen verwenden, die untergeordnete Themes sind.
Das Problem bei der direkten Verwendung von Optionszeilen besteht darin, dass Sie sie direkt verwenden und bestimmte Schlüsselnamen für Ihre Einstellungen verwenden.
Wenn ich ein Thema mit dem Namen "AAA" habe und ein untergeordnetes Thema mit dem Namen "BBB" für die Verwendung auf einer anderen Website erstelle, verwendet mein Thema "AAA" möglicherweise eine Option mit dem Namen "example". Wenn ich eine Site aktualisiere und meine Option aktualisiere, gilt dieselbe Option jetzt für mein untergeordnetes Thema. Was ist, wenn ich das nicht wollte? Was ist, wenn das untergeordnete Thema andere Optionseinstellungen verwenden soll?
Durch das Einfügen des eigentlichen Themennamens (und nicht eines fest codierten Werts) in den Schlüssel stellen Sie sicher, dass jedes "Thema" auf der Site seine eigenen Einstellungen verwendet. Ich kann hin und her wechseln und die Einstellungen werden nicht zwischen ihnen übertragen, sie bleiben so, wie ich sie eingestellt habe. Einfacher, offensichtlicher, intuitiver.
Und wenn eine zukünftige Kernänderung oder ein Plugin die Funktionsweise von theme_mods ändert, werden Sie automatisch die Vorteile davon erhalten, ohne Änderungen vorzunehmen. Wrapper werden immer langsamer, das ist unvermeidlich, es liegt in der Natur der Wrapper. Trotzdem schreiben Sie immer noch PHP-Code, nicht Maschinensprache. Wir verwenden solche Wrapper, um Dinge zu vereinfachen und Funktionen zu trennen. Themen sollten nicht wissen oder kümmern müssen, wie ihre Optionen in der Datenbank gespeichert sind oder wie die Benennung funktioniert. Die theme_mod-Funktionen bieten eine einfachere und sauberere Lösung.
/wp-includes
aufoption.php
demget_option()
festgelegt ist, und beitheme.php
denenget_theme_mod()
festgelegt ist, können Sie sehen , dass diese tatsächlich nenntget_option()
sich, als eine Erweiterung davon handeln , die auch alle notwendigen Filter gilt. Könnte erklären, warum es langsamer ist.