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:
get_transient()
0,0245 segundosget_option()
0,0068 segundos- operação de seleção simples da tabela personalizada 0,65 segundos
Também verifiquei que o transitório não expirou durante este teste. Portanto, a pergunta é: é get_option()
mais rápido do que get_transient()
ou eu estraguei algo no meu teste? O atraso da tabela personalizada é devido às opções serem armazenadas em cache padrão pelo WordPress? Além disso, as opções também são armazenadas em cache por diferentes plugins de armazenamento em cache, como os transitórios?
plugin-development
cache
transient
options
learning_13
fonte
fonte
Respostas:
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
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ãoget_option
está saindoWP_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çãoIsso 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.
Depende:
get_option
chamadaautoload
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.Muito possível, mas a rapidez com que essa seleção leva depende muito do design da consulta e da tabela
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:
WP_Cache
normalmente não são. Por exemploWP_Post
, objetos, pós meta, etcWP_Cache
agora persiste nos pedidosPortanto, 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
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 etcQue 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
fonte
Se nenhum cache de objeto for encontrado,
get_transient
chamaget_option
duas vezes, uma vez ou o intervalo de expiração e um para o valor, portanto, não será mais rápido.get_option
o desempenho por si só será afetado se a opção for "carregada automaticamente" (padrão) ou não. Todas as opções carregadas automaticamente são recuperadas em uma solicitação para o banco de dados e armazenadas no cache de memória e, portanto, deve haver muito pouco impacto em quantas vezes você chama,get_option
mesmo que seja para opções diferentes.Quando você acessa o banco de dados diretamente, ignora todos os caches e outras melhorias de desempenho, e espera-se que seja mais lento, a menos que você implemente alguma lógica inteligente.
Tudo isso dito, não tenho certeza se o seu teste foi bom, mas, independentemente disso, toda a discussão é inútil, como se você realmente se importasse com o desempenho, usará o sistema de cache de objetos (e o plug-in relevante) que aproximará mais o tempo de acesso aos dados. para zero .... e, é claro, se você decidir usar suas próprias tabelas de banco de dados, deverá integrar suas APIs de acesso ao mecanismo de armazenamento em cache de objetos.
fonte