Geçici Geçişler API'sını ne zaman kullanmalıyım?


16

Transients API'sini daha önce hiç kullanmadım ve herkesin ne zaman kullanılacağına dair rehber olup olmadığını merak ediyordum. Codex makale , bir tema geliştirici olarak ben her yeni belirlemek isteyebilir ima WP_Query()bir geçici olarak; Aynı doğrudan $ wpdb sorgular için söylenebilir ve varsayalım query_posts(). Bu aşırı mı? Ve / Veya varsayılan olarak kullanmam gereken başka yerler var mı?

Sık sık sitemde önbellek eklentileri kullanıyorum (genellikle W3 Total Cache) ve Transients kullanmak, eklentinin etkinliğini artırabilir gibi görünüyor, ancak bu en iyi uygulama değilse geçici olarak her şeyi sarmak istemiyorum.


Herkese teşekkürler, keşke birden fazla cevabı 'çözüm' olarak işaretleyebilsem. Büyük bilgi, çok takdir etmek!
Michelle

Yanıtlar:


16

Temalarınızda ve eklentilerinizde karmaşık sorgular yaparken geçişler mükemmeldir. Menüler gibi geçici öğeler kullanma ve örneğin bir kenar çubuğunda Twitter'dan Tweet'ler gibi başka şeyler gösterme eğilimindeyim. Onları kesinlikle her şey için kullanmazdım - bu yüzden önbelleğe alınabilecek geçici veri parçaları.

Geçici olarak Memcached gibi bir şey kullanırsanız, büyük bir performans kazancı göreceğinizi unutmayın. Geçişlerle ilgili kural, bunları yalnızca geçici veriler için süreleri dolmayan veriler için kullanmamaktır ve geçici durumların her zaman veritabanında saklanmadığını aklınızda bulundurun.

Geçici durumlar için bazı kullanımlar :

  • Karmaşık ve özel veritabanı sorguları
  • Wordpress gezinme menüleri
  • Bilgileri gösteren kenar çubuğu widget'ları; tweetler, son ziyaretçilerin listesi veya Flickr fotoğraf akışı
  • Etiket bulutlarını önbelleğe alma

Bu makale , geçici testlerin sitenizi nasıl hızlandırabileceğini ve hatta birkaç örneğini gösteren hızlı ölçütlere sahip çok bilgilendirici bir makaledir . Bu diğer makalede , bunları ne için kullanacağınızı anlamanıza yardımcı olabilecek geçici kullanım örnekleri de bulunmaktadır.


2
Başka bir kullanım: harici HTTP isteklerini önbelleğe alma. Twitter API'sına vurmak gibi. Her sayfa yüklemesinde yapmayın, sonuçları geçici olarak önbelleğe alın.
chrisguitarguy

11

WordPress'te birkaç önbellekleme mekanizması vardır ve mekanikleri, nesne önbelleği seçimine bağlı olarak (yerel veya farklı) farklılık gösterir :

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

Özetle, bunun anlamı, geçici her zaman kalıcı olmasıdır (yerel olarak Önbellek'in aksine sayfa yükleri arasında hayatta kalacaktır), ancak sağlandıysa özelleştirilmiş seçeneklerden yararlanır (Seçeneklerin aksine).

Bu geçici süreleri önbellekleme için en çok yönlü seçenek haline getirir.

Bununla birlikte, esneklik aşırı akım karmaşıklığı ile gelir ve onlarla göründüğünden daha karmaşık hale getiren onlarla (ad uzunluğunda sınır, son kullanma ve son kullanma olmadan farklı davranışlar, çöp toplama eksikliği gibi) birkaç nüans vardır.

Genel:

  • kalıcı olması gereken şeyleri kaydetmek için Seçenekler'i kullanın
  • Geçici öğeleri başka bir şeyi önbelleğe almak için kullanma
  • her üçünü de çok iyi kavradığınızda Önbellek kullanın ve Önbellek durumunun diğerlerinden daha iyi kullanıldığını bilin (bu genellikle olmayacaktır)

4

Sterling kodu iki kez get_transient işlevini çağırmak değil geliştirilmiş olabilir düşünüyorum. Bunun yerine ilk sonucu geçici bir değişkende saklayın. Çünkü Geçici API'nin arkasındaki fikir hız ;-)

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

3

Kısa Cevap: Mümkün olduğunca / nerede kullanmanız gerekir.

Uzun cevap:

Geçici Geçişler API'sı önbellek içindir. Yani mümkün olduğunca kullanmak istersiniz. Bunu sizin için yapan bir işlev yazabilirsiniz.

Aşırı kilolu değildir ve düzgün bir şekilde yapılırsa oldukça zarif olur:

// 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

Geçici Geçişler API'sı, Facebook, Twitter gibi harici kaynaklardan veri alırken gerçekten kullanışlıdır.

Transients API'sının ne olduğu ve Cache WordPress işleviyle arasındaki farkın ne olduğu hakkında daha net bir fikir edinmek için Otto ve Nanic'in WordCamp San Francisco 2011'deki konuşmasını izlemenizi öneririm

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.