เมื่อสงสัยให้ดูซอร์สโค้ด
ขุดลงไป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 จะพยายามดึงมันออกมาจากฐานข้อมูล หากมีตัวเลือกอยู่ในฐานข้อมูลแล้ว WordPress จะทำการแคชในหน่วยความจำและให้กลับมาทำให้การค้นหาเร็วขึ้น
หากไม่มีตัวเลือกในฐานข้อมูลแล้ว WordPress ตั้งค่าสถานะในอาร์เรย์ "ตัวเลือกเหล่านี้ไม่มีอยู่" ภายในดังนั้นจึงไม่ลองค้นหาในภายหลังและส่งคืนค่าเริ่มต้นแทน
ดังนั้นเพื่อตอบคำถามเดิมของคุณ:
ถ้าฉันใช้ 10 ครั้งนี้ในฟังก์ชั่นต่าง ๆ ของปลั๊กอิน, WordPress ทำแบบสอบถาม 10 ข้อไปยังฐานข้อมูล, หรือใช้การโทรเพียง 1 ครั้งต่อการร้องขอ HTTP และแคชผลลัพธ์?
WordPress จะทำการเรียกฐานข้อมูล 1 ครั้งต่อการร้องขอ HTTP และแคชผลลัพธ์