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 autoload
conjunto de opções serão carregadas antecipadamente em uma única consulta. Então get_option
está 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 à autoload
opçã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_option
chamada
- As opções
autoload
definidas 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_Cache
portanto, 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_Cache
normalmente 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 __not
parâ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