Um guia para transientes no WordPress
Publicados: 2023-02-12Como desenvolvedor WordPress, você provavelmente já sabe como o desempenho é importante para um site de sucesso. No entanto, entender os transientes no WordPress e como eles ajudarão você a otimizar seus projetos pode ser um pouco complicado.
Felizmente, quando você os analisa, os transientes não são tão difíceis de entender. Contanto que você mantenha algumas diretrizes importantes em mente, você deve estar no caminho certo para incorporá-las ao seu próximo plugin do WordPress.
Nesta postagem, forneceremos uma visão geral do que são transientes do WordPress, além de como e quando usá-los. Há muito chão a cobrir, então vamos direto ao assunto!
O que são transientes do WordPress?
Para entender os transientes, é útil ter algum conhecimento básico de cache e APIs (Application Programming Interfaces).
O cache de dados da página da Web é essencialmente uma maneira de salvar temporariamente os dados de um site para que, se houver várias solicitações para os mesmos dados, o site não precise executar novamente o MySQL ou o PHP. Isso pode economizar segundos e reduzir a carga do servidor.
A ideia é manter os dados temporariamente, daí a palavra “transitórios”. A API Transients é semelhante à API de opções do WordPress. Você dá um nome e um valor aos dados – que podem ser complexos, como uma matriz PHP de vários níveis – e armazena os dados. Mais tarde, talvez até em uma solicitação diferente, você pode recuperar esses dados usando seu nome. A diferença é que os dados na tabela Opções permanecerão para sempre. Ou seja, você pode armazenar dados e, três anos depois, eles ainda estarão lá.
Todo transiente é composto de três partes:
- $transitório. Esta é a string usada para identificar seu transiente e chamá-lo. Também é chamado de 'chave' ou 'nome' do transiente.
- $valor. Esta é a informação que está sendo recuperada por meio de uma API. O valor de um transiente pode ser um objeto, uma matriz, um número ou uma string.
- $ expiração. É quanto tempo um transiente permanece em seu banco de dados, antes de ser excluído e você ter que acessar as informações necessárias por meio da API novamente.
Superficialmente, isso é tudo para os transientes do WordPress. No entanto, para usá-los corretamente, há mais coisas que você precisa saber.
No entanto, os dados dos transientes não permanecerão por perto. Essa é a questão! Você pode solicitar os dados e descobrir que estão faltando de duas maneiras. Primeiro, ao armazenar os dados, você especifica uma data de expiração. Por exemplo, você poderia dizer “armazene isso por três horas”. Portanto, se você solicitar após quatro horas, estará faltando.
A segunda maneira é permitir que parte dos dados simplesmente desapareça, a qualquer momento, por qualquer motivo. Isso soa estranho, eu sei! De que adianta armazenar os dados se você não pode contar com eles? O ponto é que o armazenamento é uma solicitação que o WordPress tentará honrar, mas devido a essa flexibilidade, é possível usar diferentes tipos de implementações para armazenamento transitório, e isso significa que é possível usar tecnologias diferentes e avançadas para tornar os transitórios extremamente eficientes. , e operar corretamente mesmo em um ambiente em cluster de vários servidores.
Por causa dessa coisa de “desaparecer a qualquer momento”, você geralmente usa transientes para um cache. Ou seja, se você precisar computar algo que leva tempo real, como uma consulta MySQL lenta, ou recuperar dados de uma fonte externa como o Twitter de alguém ou um feed RSS, você pode armazenar os dados computados em um transiente, sabendo que se eles forem perdidos é sempre possível recriá-lo. Mas no caso normal - quando NÃO desaparece - você obtém os dados rapidamente sem precisar recalcular.
Os benefícios de usar transientes em seu site WordPress
Como mencionamos anteriormente, o principal benefício dos transientes é que eles melhoram o desempenho do site. Aqui está um esboço de como isso funciona, usando o plug-in Google Site Kit como exemplo.
Quando o plug-in é ativado, ele usa uma API para exibir dados de plataformas como Analytics e Search Console no painel do WordPress. Sem transientes, o WordPress teria que recuperar essas informações de cada ferramenta toda vez que você visualizasse o painel do Site Kit:
Em vez disso, o Site Kit inclui transientes que armazenam dados em cache do Analytics e do Search Console. Eles são armazenados por um dia (ou uma hora se a plataforma não retornar dados).
Cada vez que você acessa o painel do Site Kit, o WordPress pode recuperar rapidamente as informações armazenadas do seu banco de dados em vez de ter que chamar a API novamente. Quando o período de expiração se esgota, os dados antigos são excluídos.
Isso significa que você não precisa esperar que seus resultados sejam carregados todas as vezes. Isso é útil em várias situações, como mostrar contagens de compartilhamento de mídia social para suas postagens ou exibir um feed de notícias.
Desvantagens do uso de transientes em seu site WordPress
O que causa problemas com os transientes são os comportamentos diferentes e difíceis de reproduzir que você obtém quando seu plug-in/tema é executado em diferentes implementações de transientes. Diferentes implementações de transientes significam que você só terá problemas em certas configurações com certos tipos de sites e nunca em outros. Como desenvolvedor, se você não estiver ciente dessa armadilha e não estiver codificando adequadamente, pensará que seu código é bom, mas, na verdade, ele quebrará em campo e você nem saberá como reproduzi-lo !
Quando usar os transitórios do WordPress
Os transientes são excluídos do seu banco de dados assim que atingem o final do período de expiração. Por esse motivo, você só deseja usá-los para informações que são continuamente recriadas.
Além disso, embora possam melhorar o desempenho do seu projeto, os transientes são mais bem reservados para consultas grandes e chamadas remotas. Se for necessário mais código para criar um transiente do que simplesmente fazer uma nova solicitação para o recurso sempre que necessário, é melhor ficar sem.
Gerenciando os transitórios do WordPress
Se você deseja ver e gerenciar facilmente os transientes que estão funcionando no seu site WordPress, você pode instalar o plugin Transients Manager:
Ele fornece uma lista completa de transientes, que você pode encontrar navegando em Ferramentas > Transientes :
Aqui você pode ver todos os três elementos transitórios que listamos anteriormente – a chave (nome), valor e período de expiração. Você pode editar qualquer um desses recursos clicando no link Editar :
Você também pode excluir transientes individualmente ou em massa.
Operações básicas usadas em transientes
Quando se trata de codificar seus próprios transientes, existem três operações básicas que você provavelmente precisará usar. Descrevemos cada um deles abaixo, continuando a usar o Site Kit como exemplo.
1. Definindo Transientes
Criar ou 'definir' transientes é o processo de definir a chave, o valor e o período de expiração e aplicar essas informações aos dados relevantes. Para fazer isso, você usará o seguinte formato:
Set_transient ('key', $value, expiration_period)
Aqui está o código usado no Google Site Kit para definir o transiente que armazena dados analíticos:
// Cache "data found" status for one day, "no data" status for one hour. set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS ); } return (bool) $has_data; } }
A chave transitória é googlesitekit_analytics_has_data (definida anteriormente no código), o valor é $has_data ou $has_data ? , e o prazo de validade é de um dia ou uma hora (dependendo do valor).
2. Recuperando Transientes
Recuperar transientes é um pouco mais complicado. Primeiro, você precisa usar uma função para solicitar os dados necessários. Em seguida, você verificará se há um transiente correspondente que deve ser carregado, em vez de fazer uma nova solicitação de API.
O resultado pode ser algo como isto:
function some_function(){ $transient = get_transient('key');
Você precisará retornar o transiente ou excluir os dados expirados e fazer uma nova chamada para a origem. Por fim, você deve definir o transiente depois de retornar os novos dados, para que sejam armazenados novamente até que o período de expiração se esgote.
No Google Site Kit, fica assim:
/** * Checks whether Analytics data exists for the given URL. * * @since 1.4.0 * * @param string $url The url to check data for. * @return bool */ protected function has_data_for_url( $url ) { if ( ! $url ) { return false; } $transient_key = 'googlesitekit_analytics_has_data_' . md5( $url ); $has_data = get_transient( $transient_key ); if ( false === $has_data ) { /* @var Google_Service_AnalyticsReporting_Report[]|WP_Error $reports Array of reporting report instances. */ $reports = $this->get_data( 'report', array( 'url' => $url, 'metrics' => array( array( 'expression' => 'ga:users' ), array( 'expression' => 'ga:sessions' ), ), ) ); if ( is_wp_error( $reports ) ) { $reports = array(); // Bypass data check and cache. } foreach ( $reports as $report ) { /* @var Google_Service_AnalyticsReporting_Report $report Report instance. */ $report_data = $report->getData(); /* @var Google_Service_AnalyticsReporting_ReportData $report_data Report data instance. */ foreach ( $report_data->getTotals() as $date_range_values ) { /* @var Google_Service_AnalyticsReporting_DateRangeValues $date_range_values Values instance. */ if ( isset( $date_range_values[0], $date_range_values[1] ) && ( 0 < $date_range_values[0] || 0 < $date_range_values[1] ) ) { $has_data = true; break 2; } } }
Esse código deve ser seguido pelo trecho que incluímos na seção anterior para definir transientes.
3. Excluindo Transientes
Em alguns casos, você pode achar que deseja remover um transiente. Por exemplo, se você quiser sempre ver as análises mais atualizadas no Google Site Kit, seria melhor não armazenar os dados em cache (embora não recomendemos que você realmente exclua os transientes do Site Kit).
Caso contrário, o plug-in mostrará os mesmos resultados ao longo do dia, mesmo que você tenha recebido novos visitantes. Como o transiente dura 24 horas, os dados que você visualiza à tarde serão simplesmente uma versão em cache dos dados que você carregou pela manhã.
A maneira mais fácil de excluir transientes é usando o plug-in Transients Manager. No entanto, se você quiser usar código, você pode colocar a função delete_transient() para usar. Tudo que você precisa é a chave transiente:
delete_transient('key');
No entanto, você terá que repetir isso para cada transiente que deseja excluir.
Expiração transitória: como funciona?
Os períodos de expiração transitórios podem ser expressos de algumas maneiras diferentes. As duas opções mais simples são:
- Em segundos ( set_transient('key', $value, 86400))
- Usando as constantes de tempo do WordPress ( set_transient('key', $value, DAY_IN_SECONDS))
Como alternativa, você também pode definir transientes que nunca expiram. Isso pode ser útil em situações em que você deseja manter os dados transitórios iguais, até excluir e redefinir manualmente as informações armazenadas em cache.
Criar transientes que nunca expiram é bastante simples. Simplesmente deixe o parâmetro de expiração na função set_transient em branco ou identifique-o como zero.
Compreendendo a API de Transitórios do WordPress
A API WordPress Transients é simplesmente o meio pelo qual as informações são armazenadas em cache no banco de dados do seu site. Ele habilita todas as operações relacionadas que discutimos ao longo deste post, incluindo configuração, obtenção e exclusão de transientes.
Em outras palavras, a API Transients é apenas a parte do núcleo do WordPress que permite usar transientes.
As duas implementações mais comuns do back-end da API Transients:
- Aquele embutido no WordPress e, portanto, o mais comum de longe. Os valores transitórios são armazenados na tabela wp_options exatamente como as opções regulares. Com transientes, uma opção adicional é armazenada para manter a data de expiração. Quando um transiente é acessado, o WordPress obtém primeiro a data de expiração. Se estiver expirado, o WordPress exclui ambas as opções da tabela, “limpando” os dados e finge que os dados nunca estiveram lá. Se não estiver expirado, ele pega o conteúdo da tabela de opções.
- Memcached. O Memcached é um software de servidor muito simples, mas eficiente e confiável, projetado para fazer exatamente o que a API Transients deve fazer - armazenar dados com base em uma chave, que expira em um determinado momento e que pode desaparecer a qualquer momento, se necessário para.
O uso do memcached em vez do WordPress Transients tem dois benefícios especiais, e é por isso que o pré-configuramos automaticamente para você aqui no WP Engine. Nós protegemos você
eu. Memcached é 10x-100x mais rápido em armazenar e recuperar valores do que WordPress Transients, o que é especialmente interessante, já que o objetivo dos transientes é armazenar dados em cache para aumentar a velocidade de um site.
ii. O Memcached define a quantidade máxima de espaço que ocupará com dados (por exemplo, 64 MB de RAM), o que significa que, se um site armazenar muitos dados de uma só vez, ele descartará automaticamente os dados antigos e, portanto, nunca ficará sem espaço. Mas os transientes internos do WordPress armazenarão uma quantidade arbitrária de dados na tabela de opções.
Aplicando Transitórios em Seu Desenvolvimento
Suponha que você esteja lendo e escrevendo a mesma chave Transients repetidamente e suponha que seja 1k de dados. Nesse caso, tanto o Memcached quanto o WordPress Transients farão exatamente o que você espera, e ambos ocuparão cerca de 1k de espaço (na tabela de opções ou no memcached).
Agora suponha que você esteja lendo e escrevendo diferentes chaves Transients, diferentes para cada sessão do navegador. Resumindo, e se você estiver armazenando dados de sessão de usuário em Transients? Isso faz sentido na superfície. Os dados da sessão não devem durar para sempre e você não quer se preocupar com tabelas especiais do banco de dados. Além disso, muitas empresas de hospedagem WordPress não permitem sessões PHP, então esta é realmente a próxima melhor coisa. É ainda rápido e multi-servidor.
Aqui é onde as diferenças aparecem. Com o Memcached e com um site com pouco tráfego, esse método parece funcionar. Os valores duram um tempo e são excluídos quando expiram. No entanto, se o servidor estiver muito carregado, a quantidade de dados de sessão que o servidor precisa armazenar excederá o espaço disponível no memcached e, portanto, você começará a perder dados de sessão mais cedo do que pensava. E se você não testasse exatamente neste ambiente altamente carregado, nunca saberia disso. Em geral, esses ambientes acabam preenchendo o memcached tão rapidamente que efetivamente o memcached é desabilitado porque nunca consegue manter os dados por tempo suficiente para serem úteis. Você efetivamente não tem um cache de API transitória!
Mas com o WordPress Transients, você obtém um comportamento diferente, mas ainda muito indesejável. Como os valores são gravados no banco de dados, não em um bloco de RAM de tamanho fixo, todos permanecem. O que significa que, mesmo com o site muito carregado, você ainda tem os dados da sua sessão. Incrível!
Ou então você pensou. Porque o que não é dito na API Transient é o que acontece quando você usa chaves únicas como sessões. E o que acontece com o método interno é que a tabela de opções é preenchida indefinidamente! Porque: a “limpeza de dados antigos” do WordPress só funciona quando você solicita a chave (como abordamos anteriormente). Se você apenas deixar a chave, ela ficará na tabela de opções, para sempre. Não há nenhum processo separado que os limpe!
Não apenas estamos cientes desse problema, mas também queremos ajudar nossos clientes que podem estar executando um código que não entende isso. É aí que entra o “gerenciado” no Managed WordPress! Todas as noites, temos um processo automatizado para examinar sua tabela de opções em busca de transientes expirados e excluí-los (tanto os dados quanto o item da data de expiração). Estrondo! Eles se foram e você não precisa se preocupar com eles.
É incrível que façamos isso, mas como desenvolvedor de um plug-in ou tema geral que deve funcionar corretamente em qualquer ambiente de hospedagem, você não pode fazer isso em todos os ambientes em potencial em que seu plug-in ou tema pode ser implantado e você quer ter certeza de que está fornecendo a seus usuários e clientes o código mais otimizado possível.
No entanto, agora que você sabe como os Transientes podem dar errado, pode ser uma ótima ideia dar uma olhada e ver como você pode tornar seu código mais eficiente. É provável que, se você leu até aqui, goste de otimizar seu código, e esta postagem no blog pode lançar o desafio para você e motivá-lo a reescrever algumas coisas para serem mais escaláveis!
Faça mais com seu site WordPress
Como desenvolvedor do WordPress, fornecer aos usuários finais acesso a dados remotos, mantendo um desempenho rápido, é fundamental. Os transientes do WordPress podem ajudá-lo a realizar exatamente isso.
No entanto, não custa nada obter uma ajudinha extra de hospedagem WordPress ultrarrápida e recursos de desenvolvedores profissionais. Se você é novo em codificação ou um profissional experiente, estamos prontos para ajudar. Confira nossos planos hoje!