Quando devo usar a API de transientes?

15

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

Costumo usar plug-ins de cache no meu site (geralmente W3 Total Cache) e parece que o uso de Transients pode aumentar a eficácia do plug-in, mas não quero enlouquecer envolvendo tudo em transientes, se essa não for uma prática recomendada.

Michelle
fonte
Obrigado a todos, gostaria de poder marcar mais de uma resposta como a 'solução'. Ótima informação, muito apreciada!
31512 Michelle

Respostas:

15

Os transientes são ótimos quando você faz consultas complexas em seus temas e plugins. Costumo usar transitórios 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 pedaços temporários de dados que podem ser armazenados em cache.

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

Alguns usos para transientes :

  • Consultas complexas e personalizadas ao banco de dados
  • Menus de navegação 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
  • Cache de nuvens de tags

Este artigo é muito informativo, com referências rápidas, mostrando como os transientes podem acelerar o seu site e até tem alguns exemplos. Este outro artigo também tem alguns ótimos exemplos de uso de transientes que podem ajudar você a entender para que usá-los também.

Dwayne Charrington
fonte
2
Outro uso: armazenar em cache solicitações HTTP externas. Como bater na API do twitter. Não faça isso em cada carregamento da página, armazene em cache os resultados com um transitório.
Chrisguitarguy
10

Existem vários mecanismos de cache no WordPress e suas mecânicas diferem, dependendo da escolha do cache do objeto (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 poucas palavras, o que isso significa é que o transitório é sempre persistente (sobreviverá entre as cargas de página, diferentemente do cache nativo), mas fará uso do armazenamento personalizado se fornecido (ao contrário de Opções).

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

No entanto, com a flexibilidade, a complexidade é subcorrente e existem algumas nuances (como limite no tamanho do nome, comportamento diferente com e sem expiração, falta de coleta de lixo) que as tornam mais complexas do que parecem.

No geral:

  • use Opções para salvar coisas que devem ser persistentes
  • use Transients para armazenar em cache qualquer outra coisa
  • use o Cache quando tiver uma boa compreensão de todos os três e saiba que o cache se encaixa nos casos de uso melhor do que outros (o que não será frequente)
Rarst
fonte
3

Eu acho que o código da Sterling poderia ser melhorado se você 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 ideia por trás da API transitória é velocidade ;-)

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

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

Resposta longa:

A API de transientes é para armazenamento em cache. Então você quer usá-lo o máximo que puder. Você pode escrever uma função que faça isso por você.

Não é um 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.
}
Sterling Hamilton
fonte
2

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

Para ter uma ideia mais clara do que é a API do Transients e qual a diferença com a função Cache WordPress, recomendo assistir à palestra de Otto e Nanic no WordCamp São Francisco 2011

Mamaduka
fonte