如果有疑问,请查看源代码。
挖掘到get_option()
, 您将看到(缩写):
$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 );
}
}
首先,WordPress检查内存中是否已经有该选项。默认情况下,
wp_cache_get()
将从内存中的数据存储中检索值(通常只是一个PHP变量)。但有些安装使用更高级的对象缓存,将数据存储在其他地方。
无论哪种情况,wp_cache_get()
如果WordPress已经知道,将返回您的选项值。
如果没有,WordPress将尝试从数据库中获取它。如果DB中存在该选项,WordPress会将其缓存在内存中,然后将其返回,从而加快后续的查找速度。
如果该选项在数据库中不存在,则WordPress会在内部“这些选项不存在”数组中标记该选项,以便以后不会尝试查找它,而是返回一些默认值。
因此,要回答您最初的问题:
如果我在插件的各种功能中使用了10次,WordPress是对数据库进行10次查询,还是每个HTTP请求只进行1次数据库调用并缓存结果?
WordPress将对每个HTTP请求进行1次数据库调用,并缓存结果。