Hoje, eu executo um teste no meu banco de dados para explorar a diferença de velocidade entre acessar uma chave a partir de opções, tabela personalizada e transitórios. Eu executei o teste por 1000 vezes e a seguir é o tempo necessário para executar 1000 operações de obtenção:
Lembre-se de que a tabela de opções é usada para opções e transitórios na maioria dos sistemas e que a tabela foi otimizada, com índices adicionados. Portanto, não é uma comparação justa
get_transient () 0.0245 segundos get_option () 0.0068 segundos operação de seleção simples da Tabela Personalizada 0.65 segundos
Essa também é uma comparação injusta, as opções com o autoloadconjunto de opções serão carregadas antecipadamente em uma única consulta. Então get_optionestá saindo WP_Cache, a opção já foi recuperada.
TLDR: Na verdade, não está buscando a opção, ela já foi buscada, está apenas retirando-a da memória devido à autoloadopção
Também verifiquei que o transitório não expirou durante este teste.
Isso não deve ter impacto em um sistema normal na recuperação transitória, afinal ele não sabe se expirou até que seja recuperado.
Portanto, a pergunta é: get_option () é mais rápido que get_transient () ou eu estraguei algo no meu teste?
Depende:
- Na maioria dos sistemas, os transitórios são armazenados usando opções, ambos envolvem uma
get_optionchamada
- As opções
autoloaddefinidas como true são todas carregadas em uma única chamada no início, para que sejam mantidas na memória, nenhuma consulta acontece depois disso.
- O cache de objetos armazena em cache as opções carregadas automaticamente e os transientes
O atraso da tabela personalizada é devido ao padrão de opções em cache do WordPress?
Muito possível, mas a rapidez com que essa seleção leva depende muito do design da consulta e da tabela
Além disso, as opções também são armazenadas em cache por diferentes plugins de armazenamento em cache, como os transitórios?
Sim, WP_Cacheé usado, o que o armazenará na memória pelo restante da solicitação. Os plug-ins de cache podem persistir nesses valores por razões de desempenho.
Repetibilidade
Tudo isso é armazenado em cache, WP_Cacheportanto, na segunda vez que você o solicita, nenhum banco de dados está envolvido.
Variabilidade e Depende
Tudo isso assume uma base comum, mas e os caches de objetos?
Vamos introduzir uma instância do MemcacheD ou uma instância do Redis (eu recomendo que você faça isso se tiver a opção, ENORME benefícios de desempenho para sites bem construídos, especialmente se você os usar para cache de página, a menos que você tenha algo como a configuração do Varnish)
Agora temos uma nova situação:
- Agora, os dados são armazenados na RAM e, uma vez buscados no banco de dados, são preparados, e os tempos de acesso são reduzidos drasticamente. Ainda mais lento que uma variável, mas significativamente mais rápido que uma consulta ao banco de dados
- Muitos dados novos são armazenados e
WP_Cachenormalmente não são. Por exemplo WP_Post, objetos, pós meta, etc
WP_Cache agora persiste nos pedidos
- MemcacheD etc pode eliminar transientes expirados etc
Portanto, agora os transitórios e as opções têm o mesmo custo de acesso. Eles já estavam próximos, mas agora são insignificantes e têm mais a ver com a carga da CPU no momento em que a solicitação foi feita.
Portanto, para desempenho, devo usar transitórios ou opções?
Embora seja uma pergunta digna de reflexão, a resposta é que a diferença é insignificante e está dentro das margens de erro

Portanto, pare de otimizar, eles são o mesmo meio de armazenamento e isso não vale o seu tempo
- Use as opções se precisar armazenar algo em todo o site
- Use transientes para armazenar temporariamente itens caros de calcular, para que você não precise da próxima vez
Não vale a pena escolher um com base no desempenho; não há diferença significativa.
Há coisas muito melhores a serem feitas para otimizar que proporcionam economias significativamente maiores, por exemplo, usando taxonomias em vez de meta em consultas de postagem, não usando __notparâmetros de estilo, fazendo menos coisas na página, instalando um cache de objeto, diminuindo postagens por página, evitando solicitações remotas etc
Que tal uma tabela personalizada que irá ...
Não, a tabela de opções já está bem otimizada, o uso de uma tabela personalizada simplesmente moverá as operações para fora do sistema WP Caching, forçando você a escrever sua própria