Şüphe duyduğunuzda, kaynak koduna bakın.
Adresine girdiğinizde şunu get_option()
görürsünüz (kısaltılmış):
$value = wp_cache_get( $option, 'options' );
if ( false === $value ) {
$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
// Has to be get_row instead of get_var because of funkiness with 0, false, null values
if ( is_object( $row ) ) {
$value = $row->option_value;
wp_cache_add( $option, $value, 'options' );
} else { // option does not exist, so we must cache its non-existence
$notoptions[$option] = true;
wp_cache_set( 'notoptions', $notoptions, 'options' );
return apply_filters( 'default_option_' . $option, $default );
}
}
İlk olarak, WordPress zaten bellekte seçenek olup olmadığını kontrol eder. Varsayılan olarak, wp_cache_get()
değerleri bir bellek içi veri deposundan alır (genellikle yalnızca bir PHP değişkeni). Ancak bazı yüklemeler, verileri başka bir yerde saklayan daha gelişmiş bir nesne önbelleği kullanır.
Her iki durumda da, wp_cache_get()
WordPress zaten biliyorsa seçenek değerinizi döndürür.
Değilse, WordPress veritabanından tutmaya çalışır. Seçenek DB'de varsa, WordPress bunu bellekte önbelleğe alır ve daha sonra geri verir ve sonraki aramaları daha hızlı hale getirir.
Seçenek veritabanında yoksa, WordPress bunu dahili bir "bu seçenekler yok" dizisinde işaretler, böylece daha sonra aramaya çalışmaz ve bunun yerine bazı varsayılan değerler döndürür.
Orijinal sorunuza cevap vermek için:
Bunu 10 kez eklentimin çeşitli işlevlerinde kullanırsam, WordPress veritabanına 10 sorgu yapar mı yoksa her HTTP isteği için yalnızca 1 veritabanı çağrısı yapar ve sonuçları önbelleğe alır mı?
WordPress her HTTP isteği için 1 veritabanı çağrısı yapar ve sonuçları önbelleğe alır.