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.


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.


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)

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 ); 
    }
}

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.
}

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.