Evet yanıtı, theme_mod işlevleri daha yavaş olacak, ancak önemli olmayacak ve faydalar farklılıklardan daha ağır basacaktır.
Tema modları seçenek olarak kaydedilir. Bu nedenle, theme_mod işlevleri, seçenekler işlevleri etrafındaki sarmalayıcılardır.
İlk olarak, theme_mod ayarlarının belirli bir tema adına anahtarlanmış tek bir seçenekte bir dizi olarak saklandığını anlayın. Eğer bunu yaparsam:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
Sonra aslında veritabanında ne olsun, içinde 'aaa' => 123, 'bbb' => 456) ile serileştirilmiş bir dizi içeren theme_mods_themename adı ile tek bir seçenek satırıdır.
Şimdi, get_theme_mod
daha yavaş olacak çünkü aslında ikiget_option
çağrı yapıyor. İlk olarak, temanın adını alır. Sonra theme_mods_themename
seçeneği alır . İşte tam% 50 hız kaybı. Yapılan işin geri kalanı çoğunlukla filtrelerde yatar, çünkü ekstra bir filtre çağrısı vardır, ancak bu filtrede bir şey yoksa, bu biraz önemsizdir.
Sistemin alınan verileri nesne önbelleğinde sakladığına dikkat edin, bu nedenle burada birden fazla veritabanı çağrısı yapmaz. Sadece ilk kullanım bir veritabanı isabet ile sonuçlanır.
Bu set_theme_mod
biraz daha yavaş olacaktır çünkü aynı iki alma seçeneği aramasını yapar, daha sonra get_option
tema adını tekrar almak için başka bir arama yapar ve sonraupdate_option
şimdi değişti seçeneklerinin tamamına sahip. Bu bir veritabanı güncellemesine neden olur ve çok daha fazla veri göndermesi gerçekten de göze çarpan bir yavaşlamanın nedeni olabilir. Birkaç bayt güncelleme, daha büyük bir satırı güncellemekten daha hızlıdır. Ama genellikle fark edeceğiniz kadar değil. Çok fazla ayarın olmadığı sürece ...
Tema modu işlevleri muhtemelen genel olarak optimizasyondan kaynaklanmaktadır, ancak yine de get_option yerine bunları kullanmalısınız ve bu nedenle alt temalar.
Seçenek satırlarını doğrudan kullanmayla ilgili sorun, bunları doğrudan kullanmanız ve ayarlarınız için belirli anahtar adları kullanmanızdır.
"AAA" adlı bir temam varsa ve başka bir sitede kullanmak için "BBB" adlı bir alt tema oluşturursam, "AAA" temam "örnek" adlı bir seçenek kullanabilir. Bir siteyi güncellediğimde ve benim seçeneğimi güncellediğimde, aynı seçenek artık alt temam için geçerli olacak. Ya bunu yapmak istemezsem? Alt temanın farklı bir dizi seçenek ayarı kullanmasını istersem ne olur?
Tema modları, anahtarın bir parçası olarak gerçek tema adını (ve sabit kodlu bir değer değil) ekleyerek, sitedeki her "temanın" kendi ayar kümesini kullanmasını sağlar. İleri geri gidebilirim ve ayarlar aralarında aktarılmaz, ayarladığım şekilde kalırlar. Daha basit, daha açık, daha sezgisel.
Ve gelecekteki bir çekirdek değişiklik veya eklenti, theme_mods'un çalışma şeklini değiştirirse, herhangi bir değişiklik yapmadan bunun avantajlarından otomatik olarak yararlanacaksınız. Sarmalayıcılar her zaman daha yavaş olacaktır, bu kaçınılmazdır, sargıların doğasıdır. Bununla birlikte, hala makine dili değil, PHP kodu yazıyorsunuz. İşleri kolaylaştırmak ve işlevselliği ayırmak için böyle sarmalayıcılar kullanıyoruz. Temaların, seçeneklerinin veritabanında nasıl depolandığını veya adlandırma işleminin nasıl çalıştığını bilmesine veya bunlara dikkat etmesine gerek yoktur. Theme_mod işlevleri daha temiz ve basit bir çözüm sunar.
/wp-includes
enoption.php
neredeget_option()
tanımlanır ve entheme.php
neredeget_theme_mod()
ikincisi aslında çağırır tanımlanır görebilirsinizget_option()
da gerekli filtreleri uygular bunun bir uzantısı olarak hareket ederek, kendisini. Neden daha yavaş olduğunu açıklayabilir.