Odpowiedź brzmi: tak, funkcje theme_mod będą działały wolniej, ale nie znacząco, a korzyści przeważają nad różnicami.
Mody motywów są przechowywane jako opcje. Zasadniczo funkcje theme_mod otaczają funkcje opcji.
Najpierw zrozum, że ustawienia theme_mod są przechowywane jako tablica w jednej opcji, przypisanej do konkretnej nazwy motywu. Więc jeśli to zrobię:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Zatem to, co faktycznie otrzymuję w bazie danych, to pojedynczy wiersz opcji o nazwie theme_mods_themename, który zawiera szeregowaną tablicę z ('aaa' => 123, 'bbb' => 456).
Teraz get_theme_mod
będzie wolniejszy, ponieważ w rzeczywistości wykonuje dwa get_option
połączenia. Najpierw dostaje nazwę motywu. Potem dostajetheme_mods_themename
opcję. A więc tutaj jest to 50% utrata prędkości. Reszta pracy polega głównie na filtrach, ponieważ istnieje dodatkowe wywołanie filtru, ale jeśli nie masz czegoś w tym filtrze, jest to trochę nieistotne.
Zauważ, że system opcji przechowuje pobrane dane w pamięci podręcznej obiektów, więc nie wykonuje tutaj wielu wywołań bazy danych. Tylko pierwsze użycie powoduje trafienie do bazy danych.
set_theme_mod
Będzie nieco wolniejszy, ponieważ to sprawia, że te same dwa dostać opcji połączeń, to ma inną get_option
rozmowę ponownie uzyskać nazwę tematu, a następnie robi update_option
z pełnym zestawem teraz zmienionych opcji. Powoduje to aktualizację bazy danych, a fakt, że wysyła znacznie więcej danych, może rzeczywiście być przyczyną zauważalnego spowolnienia. Aktualizacja kilku bajtów jest szybsza niż aktualizacja większego wiersza. Ale zwykle nie tak, jak można to zauważyć. Chyba że masz mnóstwo ustawień ...
Z pewnością funkcje modów motywów prawdopodobnie wymagają ogólnej optymalizacji, ale mimo to powinieneś ich używać zamiast get_option i dlatego, że motywy potomne.
Problem z bezpośrednim używaniem wierszy opcji polega na tym, że używasz ich bezpośrednio i używasz określonych nazw kluczy dla swoich ustawień.
Jeśli mam motyw o nazwie „AAA” i utworzę z niego motyw podrzędny o nazwie „BBB” do użytku w innej witrynie, to mój motyw „AAA” może użyć opcji o nazwie „przykład”. Kiedy zaktualizuję jedną witrynę i zaktualizuje ona moją opcję, wówczas ta sama opcja będzie miała zastosowanie do motywu podrzędnego. Co jeśli nie chcę tego robić? Co jeśli chciałbym, aby motyw potomny używał innego zestawu ustawień opcji?
Mody motywów, włączając rzeczywistą nazwę motywu (a nie wartość zapisaną na stałe) jako część klucza, zapewniają, że każdy „motyw” na stronie używa własnego zestawu ustawień. Mogę przełączać się między nimi, a ustawienia nie są przenoszone między nimi, pozostają one tak, jak je ustawiłem. Prostsze, bardziej oczywiste, bardziej intuicyjne.
A jeśli jakaś przyszła zmiana rdzenia lub wtyczka zmodyfikuje sposób działania theme_mods, to automatycznie uzyskasz korzyści bez żadnych zmian. Owijarki zawsze będą wolniejsze, co jest nieuniknione, taka jest natura owijarek. Niemniej jednak nadal piszesz kod PHP, a nie język maszynowy. Używamy takich opakowań, aby uprościć rzeczy i oddzielić funkcjonalność. Motywy nie powinny wiedzieć ani dbać o to, jak ich opcje są przechowywane w bazie danych ani jak działa nazewnictwo. Funkcje theme_mod zapewniają prostsze rozwiązanie, które jest czystsze.
/wp-includes
na to,option.php
gdzieget_option()
jest zdefiniowane, itheme.php
gdzieget_theme_mod()
jest zdefiniowane, możesz zobaczyć, że ten ostatni tak naprawdę nazywaget_option()
siebie, działając jako jego rozszerzenie, które stosuje również wszelkie niezbędne filtry. Może wyjaśnić, dlaczego jest wolniejszy.