Quando devo usar a API Transients?

12

Eu nunca usei a API de transientes antes e queria saber se alguém tem orientação sobre quando usá-la. O artigo do Codex implica que, como desenvolvedor de temas, talvez eu queira definir cada novo WP_Query() como transitório; Eu suponho que o mesmo pode ser dito para as consultas diretas $ wpdb e query_posts() . Isso é um exagero? E / ou há outros lugares que eu deveria usar como padrão?

Eu costumo usar plugins de cache no meu site (W3 Total Cache normalmente) e parece que usar Transients pode aumentar a eficácia do plugin, mas eu não quero enlouquecer tudo em transientes se não for uma prática recomendada.

    
por Michelle 09.03.2012 / 23:32

5 respostas

15

Os transientes são ótimos quando você está fazendo consultas complexas em seus temas e plug-ins. Eu costumo usar transientes para coisas como menus e mostrar outras coisas como Tweets do Twitter em uma barra lateral, por exemplo. Eu não os usaria para absolutamente tudo mais - apenas dados temporários que podem ser armazenados em cache.

Tenha em mente que, se você usar algo como Memcached com transientes, notará um enorme ganho de desempenho. A regra com transientes é não usá-los para dados que não devem expirar, pois são apenas dados temporários e lembre-se de que os transientes nem sempre são armazenados no banco de dados.

Alguns usos para transientes :

  • Consultas de banco de dados complexas e personalizadas
  • Menus de navegação do Wordpress
  • Widgets da barra lateral que exibem informações como; tweets, uma lista de visitantes recentes do site ou um fluxo de fotos do Flickr
  • Caching tag clouds

Este artigo é muito informativo, com benchmarks rápidos mostrando como os transientes podem acelerar seu site e até tem alguns exemplos. Este outro artigo também tem alguns ótimos exemplos de uso de transientes que podem ajudá-lo a entender o que para usá-los também.

    
por Dwayne Charrington 10.03.2012 / 00:01
10

Existem vários mecanismos de cache no WordPress e sua mecânica é diferente, dependendo da escolha do cache de objetos (nativo ou não) :

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+
Em suma, o que isto significa é que o transitório é sempre persistente (irá sobreviver entre as cargas de página ao contrário do Cache nativamente), mas fará uso de armazenamento personalizado se fornecido (ao contrário das Opções).

Isso torna a escolha mais versátil de transientes para armazenamento em cache.

No entanto, com a flexibilidade vem a complexidade de subcorrente e há algumas nuances com elas (como limite na duração do nome, comportamento diferente com e sem expiração, falta de coleta de lixo) que as tornam mais complexas do que parecem.

Geral:

  • use Opções para salvar coisas que devem ser persistentes
  • use Transientes para colocar em cache qualquer outra coisa
  • use o Cache quando você tiver uma compreensão muito boa dos três e souber que o Cache se adequa ao caso de uso melhor do que outros (o que não será frequente)
por Rarst 10.03.2012 / 17:54
3

Eu acho que o código do Sterling poderia ser melhorado por não chamar a função get_transient duas vezes. Em vez disso, armazene o primeiro resultado em uma variável temporária. Porque a idéia por trás da API transitória é a velocidade; -)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}
    
por Thomas 10.03.2012 / 12:47
2

Resposta curta: você deve usá-la quando / onde puder.

Longa Resposta:

A API de transientes é para armazenamento em cache. Então você quer usá-lo tanto quanto você puder. Você pode escrever uma função que faz isso para você.

Não é exagero e, se feito corretamente, acaba sendo bem elegante:

// 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.
}
    
por Sterling Hamilton 10.03.2012 / 00:06
2

A API de transientes é realmente útil quando você está buscando dados de fontes externas como Facebook, Twitter.

Para ter uma idéia mais clara do que é a API Transients e qual é a diferença com a função Cache WordPress, recomendo assistir as palestras de Otto e Nanic de WordCamp São Francisco 2011

    
por Mamaduka 10.03.2012 / 15:01

Tags