เมื่อใดฉันจึงควรใช้ Transients API


16

ฉันไม่เคยใช้ Transients API มาก่อนและสงสัยว่าใครมีคำแนะนำว่าควรใช้เมื่อใด บทความ Codexหมายความว่าเป็นนักพัฒนารูปแบบฉันอาจต้องการตั้งใหม่แต่ละWP_Query()เป็นชั่วคราว; ผมถือว่าเดียวกันอาจจะกล่าวว่าสำหรับ $ โดยตรงแบบสอบถาม wpdb query_posts()และ มันเกินความจริงเหรอ? และ / หรือมีสถานที่อื่น ๆ ที่ฉันควรใช้เป็นค่าเริ่มต้นหรือไม่

ฉันมักจะใช้ปลั๊กอินสำหรับแคชบนเว็บไซต์ของฉัน (โดยปกติแล้ว W3 Total Cache) และดูเหมือนว่าการใช้ Transients อาจทำให้ประสิทธิภาพของปลั๊กอินลดลง แต่ฉันไม่ต้องการห่อทุกอย่างแบบบ้าๆถ้ามันไม่ใช่วิธีที่ดีที่สุด


ขอบคุณทุกคนฉันหวังว่าฉันสามารถทำเครื่องหมายมากกว่าหนึ่งคำตอบว่า 'ทางออก' ข้อมูลที่ยอดเยี่ยมชื่นชมมาก!
มิเชล

คำตอบ:


16

ชั่วคราวเป็นสิ่งที่ดีเมื่อคุณทำการสืบค้นที่ซับซ้อนในธีมและปลั๊กอินของคุณ ฉันมักจะใช้ทรานแซกชันสำหรับสิ่งต่าง ๆ เช่นเมนูและแสดงสิ่งอื่น ๆ เช่นทวีตจาก Twitter ในแถบด้านข้าง ฉันจะไม่ใช้มันสำหรับทุกสิ่งอย่างยิ่งดังนั้นเพียงแค่ชิ้นส่วนชั่วคราวของข้อมูลที่สามารถแคชได้

โปรดทราบว่าหากคุณใช้บางอย่างเช่น Memcached กับผู้ที่อยู่ชั่วคราวคุณจะสังเกตเห็นถึงประสิทธิภาพที่เพิ่มขึ้นอย่างมาก กฎสำหรับการใช้งานชั่วคราวคือการไม่ใช้มันสำหรับข้อมูลที่ไม่ควรหมดอายุเนื่องจากเป็นข้อมูลชั่วคราวเท่านั้นและโปรดทราบว่าการเก็บข้อมูลชั่วคราวจะไม่ถูกเก็บไว้ในฐานข้อมูลเสมอ

บางคนใช้สำหรับชั่วคราว :

  • แบบสอบถามฐานข้อมูลที่ซับซ้อนและกำหนดเอง
  • เมนูนำทาง Wordpress
  • วิดเจ็ตแถบด้านข้างที่แสดงข้อมูลเช่น; ทวีตรายการผู้เยี่ยมชมไซต์ล่าสุดหรือสตรีมรูปภาพ Flickr
  • แท็กเมฆแท็ก

บทความนี้เป็นบทความที่ให้ข้อมูลอย่างรวดเร็วพร้อมการวัดประสิทธิภาพที่แสดงให้เห็นว่าผู้ใช้สามารถเพิ่มความเร็วเว็บไซต์ของคุณได้อย่างไรและยังมีตัวอย่างอีกสองสามตัวอย่าง บทความอื่น ๆ นี้ยังมีตัวอย่างที่ดีของการใช้ชั่วคราวซึ่งอาจช่วยให้คุณเข้าใจสิ่งที่จะใช้พวกเขาเช่นกัน


2
การใช้งานอื่น: แคชคำขอ HTTP ภายนอก กดปุ่ม API ของ twitter อย่าดำเนินการกับทุก ๆ หน้าโหลดแคชผลลัพธ์ด้วยชั่วคราว
chrisguitarguy

11

มีกลไกการแคชหลายอย่างใน WordPress และกลไกของพวกเขาแตกต่างกันไปขึ้นอยู่กับการเลือกแคชวัตถุ (ดั้งเดิมหรือไม่):

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+

โดยสรุปสิ่งนี้หมายถึงว่าชั่วคราวอยู่ถาวร (จะอยู่รอดระหว่างการโหลดหน้าไม่เหมือนแคชดั้งเดิม) แต่มันจะใช้ประโยชน์จากการจัดเก็บที่กำหนดเองหากให้ (ไม่เหมือนตัวเลือก)

สิ่งนี้ทำให้ตัวเลือกชั่วคราวที่หลากหลายที่สุดสำหรับการแคช

อย่างไรก็ตามความยืดหยุ่นมาพร้อมกับความซับซ้อนน้อยกว่าและมีความแตกต่างเล็กน้อยกับพวกเขา (เช่น จำกัด เกี่ยวกับความยาวชื่อ, พฤติกรรมต่าง ๆ ที่มีและไม่มีวันหมดอายุ, ไม่มีการรวบรวมขยะ) ที่ทำให้พวกเขาซับซ้อนกว่าที่พวกเขาดูเหมือน

โดยรวม:

  • ใช้ตัวเลือกสำหรับการบันทึกสิ่งต่าง ๆ ที่ต้องคงอยู่
  • ใช้ Transients เพื่อแคชสิ่งอื่น
  • ใช้ Cache เมื่อคุณเข้าใจทั้งสามคนได้ดีและรู้ว่า Cache นั้นเหมาะกับการใช้งานกรณีดีกว่าคนอื่น (ซึ่งไม่บ่อย)

4

ฉันคิดว่ารหัสจาก Sterling สามารถปรับปรุงได้โดยไม่เรียกใช้ฟังก์ชัน get_transient สองครั้ง เก็บผลลัพธ์แรกไว้ในตัวแปรชั่วคราวแทน เพราะแนวคิดเบื้องหลัง Transient API ist speed ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}

3

คำตอบสั้น ๆ : คุณควรใช้เมื่อ / สถานที่ที่คุณสามารถ

คำตอบยาว:

Transients API สำหรับการแคช ดังนั้นคุณต้องการใช้มันให้ได้มากที่สุด คุณสามารถเขียนฟังก์ชั่นที่ทำเพื่อคุณ

มันไม่ได้เกินความจริงและหากทำอย่างถูกต้องจะกลายเป็นสวยสง่า:

// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
    return
    ( get_transient( $query ) ) ?
    get_transient( $query ) :
    $this->_get_query( $query );
}

// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
  // Database logic. Results go to $results.
  ...
  set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}

3

Transients API มีประโยชน์จริง ๆ เมื่อคุณดึงข้อมูลจากแหล่งภายนอกเช่น Facebook, Twitter

เพื่อให้เข้าใจได้ชัดเจนยิ่งขึ้นว่า Transients API คืออะไรและอะไรคือความแตกต่างของฟังก์ชั่น Cache WordPress ฉันแนะนำให้ดูการพูดคุยของ Otto และ Nanic จากWordCamp San Francisco 2011

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.