Jawabannya ya, fungsi theme_mod akan lebih lambat, tetapi tidak signifikan, dan manfaatnya lebih besar daripada perbedaannya.
Mod tema disimpan sebagai opsi. Jadi, pada dasarnya, fungsi theme_mod adalah pembungkus di sekitar fungsi opsi.
Pertama, pahami bahwa pengaturan theme_mod disimpan sebagai array dalam satu opsi, dikunci dengan nama tema tertentu. Jadi, jika saya melakukan ini:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Lalu apa yang sebenarnya saya dapatkan di database adalah baris opsi tunggal dengan nama theme_mods_themename yang berisi array serial dengan ('aaa' => 123, 'bbb' => 456) di dalamnya.
Sekarang, get_theme_mod
akan lebih lambat karena itu sebenarnya membuat dua get_option
panggilan. Pertama, ia mendapat nama temanya. Kemudian, ia mendapat theme_mods_themename
opsi. Jadi di sana itu adalah kehilangan kecepatan 50%. Sisa pekerjaan yang dilakukan sebagian besar terletak pada filter, karena ada panggilan filter tambahan, tetapi kecuali Anda memiliki sesuatu pada filter itu, ini agak tidak signifikan.
Perhatikan bahwa sistem opsi menyimpan data yang diambil dalam cache objek, jadi ini tidak membuat beberapa panggilan basis data di sini. Hanya penggunaan pertama yang menghasilkan hit database.
The set_theme_mod
akan agak lambat karena membuat yang sama dua get opsi panggilan mereka, maka masuk lagi get_option
panggilan untuk mendapatkan nama tema lagi, dan kemudian melakukan update_option
dengan set lengkap pilihan sekarang berubah. Ini menyebabkan pembaruan basis data, dan fakta bahwa ia mengirimkan lebih banyak data memang dapat menjadi penyebab perlambatan yang nyata. Memperbarui beberapa byte lebih cepat daripada memperbarui baris yang lebih besar. Tapi biasanya tidak sebanyak yang Anda perhatikan. Kecuali jika Anda memiliki banyak pengaturan ...
Fungsi mod tema mungkin karena untuk optimasi secara keseluruhan, tentu saja, tetapi Anda tetap harus menggunakannya alih-alih get_option dan semacamnya karena tema anak.
Masalah dengan menggunakan baris opsi secara langsung adalah Anda menggunakannya secara langsung dan menggunakan nama-nama kunci spesifik untuk pengaturan Anda.
Jika saya memiliki tema yang disebut "AAA" dan saya membuat tema anak yang disebut "BBB" untuk digunakan di situs lain, maka tema "AAA" saya mungkin menggunakan opsi bernama "example". Ketika saya memperbarui satu situs, dan itu memperbarui opsi saya, maka opsi yang sama sekarang akan berlaku untuk tema anak saya. Bagaimana jika saya tidak ingin melakukannya? Bagaimana jika saya ingin tema anak menggunakan set pengaturan opsi yang berbeda?
Mod tema, dengan memasukkan nama tema aktual (dan bukan nilai yang dikodekan) sebagai bagian dari kunci memastikan bahwa setiap "tema" di situs menggunakan set pengaturannya sendiri. Saya dapat beralih bolak-balik dan pengaturan tidak mentransfer di antara mereka, mereka tetap bagaimana saya mengaturnya. Lebih sederhana, lebih jelas, lebih intuitif.
Dan jika beberapa perubahan inti atau plugin di masa depan memodifikasi cara kerja theme_mods, maka Anda akan secara otomatis mendapatkan manfaatnya tanpa perubahan apa pun. Pembungkus akan selalu lebih lambat, itu tidak bisa dihindari, itu adalah sifat pembungkus. Meskipun demikian, Anda masih menulis kode PHP, bukan bahasa mesin. Kami menggunakan pembungkus seperti ini untuk menyederhanakan hal-hal dan memisahkan fungsi. Tema seharusnya tidak perlu tahu, atau peduli, bagaimana pilihan mereka disimpan dalam database, atau bagaimana penamaan itu bekerja. Fungsi theme_mod memberikan solusi sederhana yang lebih bersih.
/wp-includes
dioption.php
managet_option()
didefinisikan, dan padatheme.php
di managet_theme_mod()
didefinisikan, Anda dapat melihat bahwa yang terakhir benar-benar memanggilget_option()
itu sendiri, bertindak sebagai perpanjangan dari itu yang juga berlaku setiap filter yang diperlukan. Bisa menjelaskan mengapa ini lebih lambat.